You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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();
        }
    }
}

代码说明:

  1. 分隔符修正:\\.\\s* 表示匹配句号,后面可以跟任意数量的空白字符(空格、换行等),这样能自动去掉句号后面的空格,让输出更干净
  2. 读取方式调整:用 file.hasNext() 和 file.next() 配合,这样会按照你设置的分隔符来拆分内容,而不是按行读取
  3. 异常处理:添加了 FileNotFoundException 的捕获,避免文件不存在时直接崩溃
  4. 变量名统一:把之前的变量名不一致问题修复了

输出结果:

运行后会输出:

I love you
You love me
He loves her
She loves him

内容的提问来源于stack exchange,提问作者Mr.B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:52:14