将文件解析为数组时仅最后一个元素被初始化的问题求助
解决文件提取单词数组仅最后一个元素初始化的问题
兄弟,我懂你作为初学者遇到这种小问题卡壳的感觉!你的问题大概率是数组初始化没做好,或者循环赋值时索引没递增——说白了就是所有单词都往同一个数组位置塞,最后当然只剩最后一个啦。
先看你代码里的问题迹象:你定义了words数组但没根据文件第一行的长度分配内存,而且循环里的counter可能没正确递增,导致每次都覆盖同一个位置。我给你写个修正后的完整代码,每一步都给你讲清楚:
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class WordReader { String[] words; public WordReader() { try { // 第一步:打开目标文件 File infile = new File("resources/FunnyWords.txt"); Scanner reader = new Scanner(infile); // 第二步:读取文件第一行的数组长度,转成int类型 if (reader.hasNextLine()) { int arrayLength = Integer.parseInt(reader.nextLine().trim()); // 重点!用读取到的长度初始化words数组,你之前可能漏掉了这一步 words = new String[arrayLength]; } int counter = 0; // 第三步:循环读取单词,填满数组或者读完文件为止 while (reader.hasNext() && counter < words.length) { // 读取单个单词(Scanner默认按空格/换行分割内容) String word = reader.next(); // 把单词放到数组的对应索引位置,然后计数器加1! words[counter] = word; counter++; } reader.close(); // 记得关闭扫描器,释放资源 } catch (FileNotFoundException e) { // 处理文件找不到的情况,打印错误信息方便排查 System.out.println("找不到目标文件:" + e.getMessage()); e.printStackTrace(); } } // 加个测试方法,看看提取结果对不对 public static void main(String[] args) { WordReader wordReader = new WordReader(); if (wordReader.words != null) { for (String word : wordReader.words) { System.out.println("提取到的单词:" + word); } } } }
再给你划几个你可能踩坑的关键点:
- 必须用文件第一行的长度初始化数组:你之前只声明了
words但没给它分配内存空间,或者用了固定长度的临时数组,这会导致数组根本装不下所有单词,或者直接为空。 - 循环时一定要递增索引:如果每次都把单词赋值给
words[0],那不管读多少个,最后都只会剩下最后一个覆盖上去的单词,counter++这步千万不能忘! - 选择合适的读取方法:
nextLine()是读一整行,next()是读单个单词,根据你的文件格式选——比如文件里单词是每行一个,就用nextLine();如果是空格分隔的,用next()更省心。
内容的提问来源于stack exchange,提问作者Joseph London
相关产品推荐
相关产品推荐

