如何逐字符读取特定格式文本文件并将分组存入二维数组?
没问题,我来帮你搞定这个需求!咱们直接上完整的可运行代码,再一步步解释关键部分:
完整代码实现
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class VocabularyGroupArray { public static void main(String[] args) throws FileNotFoundException { // 初始化目标10x10二维数组,刚好容纳100个分组 String[][] groupArray = new String[10][10]; // 替换成你的实际文件路径 File vocabFile = new File("your-vocab-file.txt"); Scanner scanner = new Scanner(vocabFile); // 一次性读取整个文件内容(适合无换行的连续格式) String fullContent = scanner.useDelimiter("\\Z").next(); scanner.close(); // 按句号分割所有分组:注意正则里的点号要转义(\\.),否则会匹配任意字符 String[] allGroups = fullContent.split("\\."); // 做个健壮性检查:确保文件里刚好是100个分组,避免数组越界 if (allGroups.length != 100) { System.err.println("Error: 文件中的分组数量不是100个,请检查内容!"); return; } // 把分组逐个填入二维数组 for (int i = 0; i < allGroups.length; i++) { int rowIndex = i / 10; // 计算行号:0-9,每10个分组换一行 int colIndex = i % 10; // 计算列号:0-9,每行填10个分组 // 去除分组前后可能的空格(如果文件里有多余空格的话) groupArray[rowIndex][colIndex] = allGroups[i].trim(); } // 可选:验证填充结果,打印所有分组 for (int row = 0; row < 10; row++) { for (int col = 0; col < 10; col++) { System.out.printf("Group [%d][%d]: %s%n", row, col, groupArray[row][col]); } } } }
关键部分说明
- 文件读取:用
scanner.useDelimiter("\\Z")可以一次性读完整份文件,完美适配你那种所有分组连在一起的格式,不用逐行处理。 - 分组分割:必须用
split("\\.")而不是split(".")——因为正则表达式里的.是特殊字符(匹配任意字符),所以要加反斜杠转义。 - 数组填充逻辑:通过
i/10和i%10计算行列索引,非常简洁:第0-9个分组填第0行,10-19填第1行,以此类推,刚好填满10x10的数组。 - 健壮性检查:加了分组数量判断,防止文件内容不符合预期导致数组越界报错,调试起来更省心。
如果你的需求其实是要把每个分组里的单个词汇拆出来(比如把Programmer:Web-Designer拆成两个独立元素),可以再调整代码,把每个分组用split(":")二次分割,存入三维数组或者扁平化的一维数组。不过根据你的描述,上面的代码完全符合“把100个分组存入10x10二维数组”的需求。
内容的提问来源于stack exchange,提问作者alexeypm
相关产品推荐
相关产品推荐

