Java读取文本文件数字到List<Integer>时多位数拆分问题求助
问题解决:读取文件数字时多位数被拆分的问题
问题分析
你的核心问题是用split("")把字符串拆成了单个字符,这直接导致多位数被拆成单个数字。而你尝试的split(",")或split(", ")无效,是因为没处理文件中的换行符和多余空格——比如换行处的数字之间没有逗号分隔,split(", ")无法识别,会把跨行的数字(如7\n1)当成一个字符串,转int时触发异常。
解决方案
方案1:基于你的代码修改拆分规则
把拆分逻辑改成用正则表达式匹配所有非数字的分隔符(逗号、空格、换行等),这样不管是哪种分隔符都能正确拆分出完整数字:
import java.io.*; import java.util.ArrayList; import java.util.List; public class ReadFile { public void readTestCase(String files) throws IOException { File file = new File(files); byte[] bytes = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file); fis.read(bytes); fis.close(); // 用正则匹配逗号、任意空白字符(空格、换行等)作为分隔符,多个连续分隔符视为一个 String[] valueStr = new String(bytes).trim().split("[,\\s]+"); List<Integer> arr = new ArrayList<>(); for (String s : valueStr) { // 拆分后的都是纯数字字符串(空串已被trim和split处理),可直接转换 arr.add(Integer.parseInt(s)); } System.out.println(arr); } }
方案2:更简洁优雅的文件读取方式
用Files.readAllLines读取所有行,再统一处理,代码更易维护:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ReadFile { public void readTestCase(String filePath) throws IOException { // 读取所有行并合并成一个字符串 String content = Files.readAllLines(Paths.get(filePath)) .stream() .collect(Collectors.joining(" ")); // 用正则拆分所有非数字分隔符 String[] valueStr = content.split("[,\\s]+"); List<Integer> arr = new ArrayList<>(); for (String s : valueStr) { arr.add(Integer.parseInt(s)); } System.out.println(arr); } }
运行结果
两种方案都会输出你期望的结果:
[2, 7, 1, 0, 24, 2, 3, 0, 6, 3, 4, 0, 2, 1]
内容的提问来源于stack exchange,提问作者Domagoj Ratko
相关产品推荐
相关产品推荐

