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

Java文件逐词解析:如何生成指定格式的ArrayList?

解决方案:将文件文本拆分为包含单词和独立标点的ArrayList

没问题,我来帮你实现这个需求!要把Sample.txt里的内容转换成你想要的ArrayList<String>,核心是先读取整个文件内容为单个字符串,再用合适的正则表达式分割,把单词和标点符号单独拆分出来,具体步骤如下:

1. 读取文件内容

首先需要把文件里的所有内容读取成一个完整的字符串(而不是按行分割的数组)。如果你的Java版本是11及以上,用Files.readString()会非常简洁;如果是更低版本,可以用BufferedReader拼接每行内容。

2. 正则分割字符串

关键是用正则表达式把单词、标点符号、空格区分开:我们需要把engineer.拆成engineer和.,同时把空格作为分隔符。这里推荐的正则是:"(?<=\\p{Punct})|(?=\\p{Punct})|\\s+"

正则解释:

  • (?<=\\p{Punct}):正向肯定后发断言,匹配标点符号后面的位置(比如engineer.里.的后面)
  • (?=\\p{Punct}):正向肯定前瞻断言,匹配标点符号前面的位置(比如engineer.里.的前面)
  • \\s+:匹配一个或多个空白字符(空格、换行等)

这三个规则用|连接,就能实现把标点单独拆出来,同时按空格分割单词。

3. 转换为ArrayList并过滤空元素

分割后可能会出现空字符串(比如连续空格的情况),需要过滤掉这些无效元素,再把数组转换成ArrayList。

完整代码示例(Java 11+)

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class FileTextSplitter {
    public static void main(String[] args) {
        try {
            // 读取文件全部内容为单个字符串
            String fileContent = Files.readString(Paths.get("Sample.txt"));
            
            // 用正则分割字符串,拆分单词和标点
            String[] splitElements = fileContent.split("(?<=\\p{Punct})|(?=\\p{Punct})|\\s+");
            
            // 转换为ArrayList并过滤空元素
            List<String> resultList = new ArrayList<>();
            for (String element : splitElements) {
                if (!element.trim().isEmpty()) {
                    resultList.add(element);
                }
            }
            
            // 输出你想要的格式
            System.out.println(resultList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Java 8及以下版本兼容代码

如果你的Java版本低于11,替换文件读取部分为BufferedReader实现:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class FileTextSplitter {
    public static void main(String[] args) {
        try {
            // 读取文件内容并拼接成单个字符串
            StringBuilder contentBuilder = new StringBuilder();
            try (BufferedReader reader = new BufferedReader(new FileReader("Sample.txt"))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    contentBuilder.append(line).append(" "); // 行之间加空格避免连字
                }
            }
            String fileContent = contentBuilder.toString().trim();
            
            // 后续分割和转换步骤和上面一致
            String[] splitElements = fileContent.split("(?<=\\p{Punct})|(?=\\p{Punct})|\\s+");
            
            List<String> resultList = new ArrayList<>();
            for (String element : splitElements) {
                if (!element.trim().isEmpty()) {
                    resultList.add(element);
                }
            }
            
            System.out.println(resultList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行这段代码后,你会得到预期的输出:

[Hi, my, name, is, john, and, I, am, an, engineer, ., How, are, you]

注意:ArrayList的默认toString()输出会在元素间加空格,但每个元素本身是你需要的独立内容(比如"engineer"和"."都是单独的元素),完全符合你的需求。

内容的提问来源于stack exchange,提问作者param trivedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:25:34