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

嵌套数组实现遇阻:如何从逗号分隔文本文件提取指定单词?

如何从逗号分隔的文本文件创建嵌套数组并提取指定单词?

看起来你已经成功把文件的每行内容读进数组了,但现在的问题是——你只是把整行文本作为数组的单个元素存储,并没有将每行里的单词按逗号拆分开。要解决这个问题,我们只需要在读取每行后增加一步拆分操作,把每行的内容转换成单词数组,最终形成嵌套结构(二维数组或嵌套列表),这样就能轻松定位到某一行的特定单词了!

解决方案:使用嵌套ArrayList(灵活易用)

这种方式适合行数不固定的情况,不需要提前知道文件有多少行:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class WordExtractor {
    public static void main(String[] args) {
        // 嵌套列表:外层存储每一行,内层存储该行的所有单词
        ArrayList<ArrayList<String>> nestedWordList = new ArrayList<>();

        try {
            Scanner fileScanner = new Scanner(new File("appendixA.txt"));

            // 逐行读取文件
            while (fileScanner.hasNextLine()) {
                String currentLine = fileScanner.nextLine();
                // 按逗号拆分每行,同时忽略逗号前后的空格(\\s*匹配零个或多个空格)
                String[] splitWords = currentLine.split(",\\s*");
                
                // 将拆分后的单词存入内层列表,同时清理单词首尾的冗余空格
                ArrayList<String> lineWords = new ArrayList<>();
                for (String word : splitWords) {
                    lineWords.add(word.trim());
                }
                
                // 把该行的单词列表加入外层嵌套列表
                nestedWordList.add(lineWords);
            }
            fileScanner.close();

            // 测试:提取指定位置的单词(索引从0开始)
            System.out.println("第一行第3个单词:" + nestedWordList.get(0).get(2)); // 输出cat
            System.out.println("第二行第5个单词:" + nestedWordList.get(1).get(4)); // 输出heavy
            System.out.println("第三行第4个单词:" + nestedWordList.get(2).get(3)); // 输出down
            System.out.println("第四行第2个单词:" + nestedWordList.get(3).get(1)); // 输出soccer

        } catch (FileNotFoundException e) {
            System.out.println("错误:找不到目标文件!");
            e.printStackTrace();
        }
    }
}

关键细节说明

  • 拆分规则:用split(",\\s*")替代简单的split(","),这样能处理文本中逗号后带空格的情况(比如你的文件里Hat, dog这种格式)。
  • 清理空格:用trim()去掉每个单词首尾的冗余空格,避免出现" down"这种带空格的单词。
  • 访问方式:通过nestedWordList.get(行索引).get(单词索引)就能精准获取指定单词,注意索引是从0开始计数的。

备选方案:使用二维数组(固定结构)

如果你提前知道文件的行数,或者更喜欢用数组结构,可以先统计行数再创建二维数组:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class ArrayWordExtractor {
    public static void main(String[] args) {
        ArrayList<String> allLines = new ArrayList<>();

        try {
            Scanner fileScanner = new Scanner(new File("appendixA.txt"));

            // 先读取所有行,统计行数
            while (fileScanner.hasNextLine()) {
                allLines.add(fileScanner.nextLine());
            }
            fileScanner.close();

            // 创建二维数组,行数等于文件的行数
            String[][] nestedWordArray = new String[allLines.size()][];

            // 逐行拆分并填充数组
            for (int i = 0; i < allLines.size(); i++) {
                String currentLine = allLines.get(i);
                String[] splitWords = currentLine.split(",\\s*");
                
                // 清理每个单词的空格
                for (int j = 0; j < splitWords.length; j++) {
                    splitWords[j] = splitWords[j].trim();
                }
                
                nestedWordArray[i] = splitWords;
            }

            // 测试访问
            System.out.println("第四行第3个单词:" + nestedWordArray[3][2]); // 输出football

        } catch (FileNotFoundException e) {
            System.out.println("错误:找不到目标文件!");
            e.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:48:34