使用Scanner的useDelimiter()读取文本文件时遇Java错误求助
问题分析与修复方案
首先看你的代码里几个关键问题:
- 正则分隔符错误:
useDelimiter(".")里的.在正则表达式中是匹配任意字符的通配符,不是字面意义的句号,得转成\\.或者用Pattern.quote(".")来匹配真实的句号 - 读取方式和分隔符不匹配:你设置了分隔符,但还是用
nextLine()读取,这方法是按换行符来读的,完全没用到你设置的分隔规则 - 变量名不一致:定义了
ArrayList<String> arr,但添加元素时用了strList.add(...),这会直接编译报错
下面是修正后的完整代码,能实现你想要的按句号分割句子、去掉句号后输出的效果:
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; public class FileReader { public static void main(String[] args) { try { // 用\\.转义句号作为分隔符,同时处理句号后的空格 Scanner file = new Scanner(new File("sample.txt")).useDelimiter("\\.\\s*"); ArrayList<String> arr = new ArrayList<>(); // 用next()按分隔符读取每个句子 while (file.hasNext()) { arr.add(file.next()); } file.close(); // 遍历输出 for (String sentence : arr) { System.out.println(sentence); } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
代码说明:
- 分隔符修正:
\\.\\s*表示匹配句号,后面可以跟任意数量的空白字符(空格、换行等),这样能自动去掉句号后面的空格,让输出更干净 - 读取方式调整:用
file.hasNext()和file.next()配合,这样会按照你设置的分隔符来拆分内容,而不是按行读取 - 异常处理:添加了
FileNotFoundException的捕获,避免文件不存在时直接崩溃 - 变量名统一:把之前的变量名不一致问题修复了
输出结果:
运行后会输出:
I love you You love me He loves her She loves him
内容的提问来源于stack exchange,提问作者Mr.B
相关产品推荐
相关产品推荐

