华为机试HJ4 字符串分割

通过全部用例,运行时间19ms,占用内存9828kb,记得在上面添加java对应的import包。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        //如果输入为空或者长度等于0,空字符串不处理
        if(str==null||str.length()==0){
            return;
        }
        //去除输入的字符串中的空字符
        str = str.replaceAll(" ","");
        //输入的字符串的长度
        int len = str.length();
        //字符串可以整出的字符串个数
        int n = len/8;
        //字符串不能整出的字符个数
        int m = 8-len%8;
        //如果输入的字符串长度小于8,在后面添加相应个数的“0”,并返回
        if(n==0){
            for(int i=0;i<m;i++){
                str+="0";
            }
            System.out.println(str);
            return;
        }
        //想着用StringBuilder会不会快点
        StringBuilder s = new StringBuilder();
        s.append(str);
        //先以字符串数组的形式存放新字符串到list集合,也可以不用list
        List<Character> c = new ArrayList<>();
        //新字符串数组
        String[] strings = new String[n+1];
        //把char数组转换成string存放到string数组
        for(int i=0;i<n;i++){
            for(int j=0;j<8;j++){
                c.add(s.charAt(i*8+j));
            }
            strings[i]=c.toString();
            //每次存放完要清空数组
            c.clear();
        }
        //如果字符串大于8且不是8的倍数
        if(m!=8){
            //先添加不能整除的部分
            for(int i=0;i<8-m;i++){
                c.add(s.charAt(8*n+i));
            }
            //再添加‘0’
            for (int i=0;i<m;i++){
                c.add('0');
            }
            strings[n] = c.toString();
        //否则字符串数组最后一个元素去掉,总长度减1
        }else {
            strings = Arrays.copyOf(strings,strings.length-1);
        }
        //遍历strings字符串数组
        for(String string:strings){
            //去除string中的“,”,空格,最前面和最后面的【】,因为之前用的list保存字符串数组
            string = string.replaceAll(",", "");
            string = string.replaceAll(" ","");
            string = string.substring(1,string.length()-1);
            System.out.println(string);
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值