题解 | #字符串分隔#

字符串分隔

https://www.nowcoder.com/practice/d9162298cb5a437aad722fccccaae8a7

import java.util.Scanner;
import java.util.stream.Stream;

// 注意类名必须为 n, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String line = in.nextLine().trim();
            final StringBuilder builder = new StringBuilder(line);
            int length = line.length();
            //确定需要补0的个数
            int zeroNum = 8 - length % 8;
            if(zeroNum>0 && zeroNum<8){
                Stream.generate(()->"0").limit(zeroNum).forEach(e->{
                    builder.append(e);
                });
            }
            String remainString = builder.toString();
            while(remainString.length()>0){
                System.out.println(remainString.substring(0,8));
                remainString = remainString.substring(8);
            }
        }
    }
}

1、以整行为单位获取输入,获取到的值trim一下两边的空格

2、计算输入字符串是否需要补0 以及需要补多少个零:该步骤思路如下

字符串长度对8取余,相当于就是求以8为长度分割字符串之后最后一个字符串长度为几?例如长度为20,以8为长度分割,有两个长度为8的子字符串和一个长度为4的子字符串,是不是似曾相识?这就是除法,20除以8,商2余4,这个余数就是我们用来计算补零个数的重要突破点,余4说明最后一个字符串不满8位,用8将去余数就是补零的个数,代码实现为:

int length = line.length();
int zeroNum = 8 - length % 8;  // 补0的个数

3、生成0拼接到原字符串,这里我们使用stream,更具zeroNum的值来生成0,然后forEach迭代流拼接到字符串中

if(zeroNum>0 && zeroNum<8){ // 零的个数如果是0或者8都表示没有余数(即没有需要补0的字符串)
                Stream.generate(()->"0").limit(zeroNum).forEach(e->{
                    builder.append(e);
                });
}

4、循环取子字符串打印,每次取完0-8的子字符串之后把原字符串替换为剩余字符串,然后继续循环操作即可,指导最后剩余的字符串长度不足0即可

String remainString = builder.toString();
while(remainString.length()>0){
     System.out.println(remainString.substring(0,8));
     remainString = remainString.substring(8);
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务