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

将文件解析为数组时仅最后一个元素被初始化的问题求助

解决文件提取单词数组仅最后一个元素初始化的问题

兄弟,我懂你作为初学者遇到这种小问题卡壳的感觉!你的问题大概率是数组初始化没做好,或者循环赋值时索引没递增——说白了就是所有单词都往同一个数组位置塞,最后当然只剩最后一个啦。

先看你代码里的问题迹象:你定义了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:37