嵌套数组实现遇阻:如何从逗号分隔文本文件提取指定单词?
如何从逗号分隔的文本文件创建嵌套数组并提取指定单词?
看起来你已经成功把文件的每行内容读进数组了,但现在的问题是——你只是把整行文本作为数组的单个元素存储,并没有将每行里的单词按逗号拆分开。要解决这个问题,我们只需要在读取每行后增加一步拆分操作,把每行的内容转换成单词数组,最终形成嵌套结构(二维数组或嵌套列表),这样就能轻松定位到某一行的特定单词了!
解决方案:使用嵌套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
相关产品推荐
相关产品推荐

