Java读取多行文件时如何优雅去除换行符?优化读取方案咨询
优化文件读取与单词拆分的解决方案
嘿,我来帮你搞定这两个问题,让代码更优雅高效~
一、更优雅的文件读取方式
你现在用Files.lines配合StringBuilder手动拼接换行符的方式虽然可行,但Java其实有更简洁的方案:
方案1:Java 11+ 直接用Files.readString
如果你的项目用的是Java 11及以上版本,这个方法最省心——一行代码就读取整个文件内容,自动处理换行符,底层已经帮你做好了所有细节:
private static String readFileContent(String filePath) { try { return Files.readString(Paths.get(filePath), StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); return ""; } }
方案2:Java 8 用Collectors.joining
如果还在使用Java 8,不用手动维护StringBuilder,用Stream的收集器直接拼接所有行,代码更简洁可读性更高:
private static String readLineByLineJava8(String filePath) { try (Stream<String> stream = Files.lines(Paths.get(filePath), StandardCharsets.UTF_8)) { return stream.collect(Collectors.joining("\n")); } catch (IOException e) { e.printStackTrace(); return ""; } }
二、解决单词拆分时带换行符的问题
你遇到的array[4] = etc\nanother这种问题,核心原因是代码逻辑出错了:你先按换行符拆分得到行数组,然后又用整个文件的原始字符串去按空格拆分,直接覆盖了之前的行数组,等于白做了行拆分!而且\n不是空格,split(" ")不会拆分它,所以换行符会和单词粘在一起。
下面给你两种正确的处理方式:
方式1:Stream一步到位(推荐)
直接在读取文件的同时处理单词,不用先拼接整个字符串,效率更高:
private void readStringPrintOccurrence() { String filePath = "input.txt"; // 注意这里你拼写错了,是input不是imput try (Stream<String> lines = Files.lines(Paths.get(filePath), StandardCharsets.UTF_8)) { String[] wordArray = lines .flatMap(line -> Arrays.stream(line.split(" "))) // 逐行拆分单词 .filter(word -> !word.isEmpty()) // 过滤连续空格产生的空字符串 .toArray(String[]::new); // 现在wordArray里就是纯净的单词数组了 for (String word : wordArray) { System.out.println(word); } } catch (IOException e) { e.printStackTrace(); } }
方式2:先读内容再拆分(兼容旧代码)
如果一定要先读取整个文件内容,那要先按行拆分,再逐行处理单词:
private void readStringPrintOccurrence() { String filePath = "input.txt"; String content = readFileContent(filePath); List<String> wordList = new ArrayList<>(); // 先按换行拆分所有行 String[] lines = content.split("\\r?\\n"); for (String line : lines) { // 对每一行按空格拆分单词 String[] wordsInLine = line.split(" "); for (String word : wordsInLine) { // 过滤空字符串(比如行首/行尾空格、连续空格) if (!word.isEmpty()) { wordList.add(word); } } } String[] wordArray = wordList.toArray(new String[0]); // 这里就可以处理wordArray了 }
额外小提醒
你的文件名拼写是imput.txt,应该是input.txt哦,别因为拼写错误导致文件找不到~
内容的提问来源于stack exchange,提问作者Blaj Bogdan
相关产品推荐
相关产品推荐

