如何在Java中按System.lineSeparator()和逗号拆分字符串?
解决方法
你遇到的问题核心是换行符和逗号都是数值的分隔符,只按逗号拆分的话,行尾的数值会和下一行的数值被换行符连在一起,或者单独成为带换行的字符串,导致处理异常。Java完全支持多次拆分,下面是几种可行的解决方案:
方法一:统一替换换行符为逗号后拆分
先把所有换行符替换成逗号,让所有分隔符统一,再按逗号拆分,最后处理空格和空字符串:
// 假设readFile已返回文件内容字符串 String fileContent = readFile("your-file-path"); // 将所有换行符替换为逗号 String normalizedContent = fileContent.replaceAll(System.lineSeparator(), ","); // 按逗号拆分 String[] rawParts = normalizedContent.split(","); // 过滤空字符串、去除空格后得到纯数字字符串数组 String[] numberStrings = Arrays.stream(rawParts) .map(String::trim) .filter(part -> !part.isEmpty()) .toArray(String[]::new); // 如果需要转为整数数组,可继续处理 int[] numbers = Arrays.stream(numberStrings) .mapToInt(Integer::parseInt) .toArray();
方法二:用正则表达式匹配所有分隔符
直接使用正则表达式,同时匹配逗号和换行符作为拆分依据,一次完成拆分:
String fileContent = readFile("your-file-path"); // 匹配逗号、换行符、回车符作为分隔符(兼容不同系统换行) String[] rawParts = fileContent.split("[,\n\r]"); // 同样处理空格和空字符串 String[] numberStrings = Arrays.stream(rawParts) .map(String::trim) .filter(part -> !part.isEmpty()) .toArray(String[]::new);
方法三:分行拆分再合并
先按换行拆分每行,再对每行单独按逗号拆分,最后合并所有结果,这种方式逻辑更直观:
String fileContent = readFile("your-file-path"); String[] lines = fileContent.split(System.lineSeparator()); List<String> numberList = new ArrayList<>(); for (String line : lines) { String[] lineParts = line.split(","); for (String part : lineParts) { String trimmedPart = part.trim(); if (!trimmedPart.isEmpty()) { numberList.add(trimmedPart); } } } // 转为一维字符串数组 String[] numberStrings = numberList.toArray(new String[0]);
注意事项
- 必须处理每个元素的前后空格,因为你的文件里有些数值前后带空格(比如", 11,")
- 过滤空字符串是为了避免连续逗号、行首尾逗号导致的无效元素
内容的提问来源于stack exchange,提问作者A_J
相关产品推荐
相关产品推荐

