牛客网华为机试【字符串分隔】

题目描述

  • 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
  • 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组

示例
输入

abc
123456789

输出

abc00000
12345678
90000000

题目分析

输入字符串,长度不够8时,拼接上 0;
长度大于8时,将字符串分割,每8个字符一组,并输出。同时满足每组长度不足8时,补0;(这里的补0的地方也就只有最后那一组了)。

这里,我写的代码如下,有一个问题,就是测试用例通过了 90% 。
后来发现,测试时的错误信息是,应该输出为 8个0的一个字符串,我却啥都没有输出。

java 代码

package org.feng.nowcoder;

import java.util.Scanner;

/**
 * Created by Feng on 2020/2/13 16:39
 * CurrentProject's name is java8
 * 字符串分隔
 * 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
 * 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
 * @author Feng
 */
public class Main3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while (input.hasNextLine()){
            // 输入两行
            String[] lines = new String[2];
            lines[0] = input.nextLine();
            lines[1] = input.nextLine();

            for (String line : lines) {
                // 空字符串不处理
                if("".equals(line)){
                    break;
                }

                int length = line.length();

                // 长度刚好是 8
                if(length == 8){
                    System.out.println(line);
                } else {
                    int temp = length % 8;
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < 8 - temp; i++) {
                        sb.append("0");
                    }

                    // 此时已经是 8 的倍数了
                    String reslut = line + sb;
                    while(reslut.length() >= 8){
                        System.out.println(reslut.substring(0, 8));
                        reslut = reslut.substring(8);
                    }
                }
            }
        }
    }
}


附加:大神的代码

后在,我在牛客的评论区找到了,一个大神的代码,思路很秀。
链接:https://www.nowcoder.com/questionTerminal/d9162298cb5a437aad722fccccaae8a7
来源:牛客网



import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){        
            String s = new String(sc.nextLine());
            if(s.length()%8 !=0 )
                s = s + "00000000";
             
            while(s.length()>=8){
                System.out.println(s.substring(0, 8));
                s = s.substring(8);
            }
        }
    }
}



分析一下,这段代码,在一开始,就判断了当字符串长度小于8时,直接拼上8个0,然后再按照长度大于8时的情况进行分割、打印,每次都更新字符串,直到最后切割剩下来的字符串长度会小于8,结束循环。

结果

在这里插入图片描述
在这里插入图片描述
大神的那段代码,我就不做测试了哈。学习,重在分享,如果您有更好的算法,欢迎留言,我们一起探讨,共同进步!

发布了108 篇原创文章 · 获赞 117 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/FBB360JAVA/article/details/104299973