/* * 题目分析: 拆分、补全字符串 * 解题思路: 读一行处理一行就行了 * 注意事项: * 1. 其实直接打印就行, 不用输出到新的字符串数组 (我就不该非得输出到数组, 导致失败了两次!!!) * 2. 考虑怎么处理多余的子串 * 3. 声明数组: String strs = new Sting[10]; * 4. 获取子串: substring(int beginIndex, int endIndex) * 提交失败: * 1. 用例通过率80%, 报错返回非0, 原因未知, 开启练习模式提交一次!!! * 2. 练习模式也没有提示未通过的用例啊, 不过给出了报错的行号, 原因: 不存在多余子串时也进行补0操作,导致数组越界 */ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String str = sc.nextLine().trim(); int len = str.length(); if (str == null || len == 0) { continue; } int num1 = len / 8; // 满足长度等于8的子串数量 int num2 = len % 8; // 多出的字符数量 String[] strs = new String[num1 + (num2 > 0 ? 1 : 0)]; for (int i = 0; i < num1; i++) { strs[i] = str.substring(i * 8, (i + 1) * 8); } // 想想有没有更好的补0的方法, 这里看起来太丑了!!! if (num2 > 0) { char[] chs = new char[8]; for (int i = 0, j = num1 * 8; num2 > 0 && i < 8; i++, j++) { if (j < len) { chs[i] = str.charAt(j); } else { chs[i] = '0'; } } strs[num1] = new String(chs); } for (String s: strs) { System.out.println(s); } } } }