题解 | #字符串分隔#
字符串分隔
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);
}