牛客网华为机试【字符串分隔】
程序员文章站
2022-04-04 11:20:16
...
题目描述
- 连续输入字符串,请按长度为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,结束循环。
结果
大神的那段代码,我就不做测试了哈。学习,重在分享,如果您有更好的算法,欢迎留言,我们一起探讨,共同进步!
下一篇: 使用php开发微信公众平台配置接口程序