读取含分散数字的TXT文件,拆分字符串数组遇异常问题
解决方法
问题根源
你的代码逻辑有两个核心问题:
nextLine()会读取整行内容(包括空行),而数字所在行的前面有大量连续空格,用split(" ")分割时,会生成大量空字符串元素,真正的数字不在sub[0]位置- 你没有将每行的有效数字收集起来,而是单次循环处理单行就打印,自然无法得到包含所有数字的数组
修正方案一:直接用Scanner的next()方法(最简便)
Scanner的next()方法默认以**任意空白字符(空格、换行、制表符等)**作为分隔符,会自动跳过所有空白,直接读取每个独立的数字字符串,完全不用手动处理拆分:
File file = new File(s); List<String> numList = new ArrayList<>(); try { Scanner in = new Scanner(file); // 每次读取一个非空白的数字字符串 while (in.hasNext()) { numList.add(in.next()); } // 转成目标数组 String[] sub = numList.toArray(new String[0]); // 测试输出 for (String num : sub) { System.out.println(num); } } catch (FileNotFoundException e) { e.printStackTrace(); }
修正方案二:逐行处理并过滤有效内容
如果坚持用nextLine(),需要先过滤空行,再对每行内容去前后空白,提取有效数字:
File file = new File(s); List<String> numList = new ArrayList<>(); try { Scanner in = new Scanner(file); while (in.hasNextLine()) { String line = in.nextLine().trim(); // 跳过空行 if (!line.isEmpty()) { numList.add(line); } } String[] sub = numList.toArray(new String[0]); // 测试输出 for (String num : sub) { System.out.println(num); } } catch (FileNotFoundException e) { e.printStackTrace(); }
原有方法失效的原因
replace('\n', ' ')无效:nextLine()读取的行本身已经去掉了换行符,换行符不在当前行的字符串里split(" ")只能分割单个空格:连续空格会生成多个空元素,比如" 1234".split(" ")会得到["", "", "", "", "1234"],数字在索引4的位置,不是索引0- 注释里的
replaceAll("\\s*[\\r\\n]+\\s*", "")逻辑错误:nextLine()已经处理了换行,当前行没有换行符
内容的提问来源于stack exchange,提问作者user20331188
相关产品推荐
相关产品推荐

