欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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,结束循环。

结果

牛客网华为机试【字符串分隔】
牛客网华为机试【字符串分隔】
大神的那段代码,我就不做测试了哈。学习,重在分享,如果您有更好的算法,欢迎留言,我们一起探讨,共同进步!