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

Java从文本文件填充两个数组时出现空指针异常求排查

空指针异常排查:单词统计数组的问题

兄弟,我来帮你捋捋这个空指针异常的问题!你要做的是统计文本文件里的单词出现次数,用两个数组分别存储单词和对应计数,但代码跑起来抛出了空指针异常,大概率是这几个地方出了问题:

  • 数组未初始化
    如果你只是声明了String[] words;或者Integer[] counts;但没有给它们分配内存空间(比如new String[初始大小]),那这两个数组默认是null状态。一旦你尝试访问数组的元素或者调用数组的属性(比如length),立刻就会触发空指针异常。Java里引用类型变量默认值都是null,必须先完成初始化才能使用。

  • 数组扩容逻辑有漏洞
    数组是固定长度的,当你要添加新单词但数组已经满了的时候,如果手动扩容的逻辑没写对,比如原数组还是null就去访问words.length,或者新数组创建后没有正确复制原有元素,都会引发空指针。比如你写了words = new String[words.length + 1];,但此时words是null,words.length这一步就会直接报错。

  • 读取的单词为空或数组元素为空时的判断问题
    如果你从文件里读取到了null(比如文件已经读完还继续读取),然后把这个null存入字符串数组,之后搜索单词时直接调用words[i].equals(currentWord),这时候words[i]是null,调用equals方法就会抛出空指针异常。

给你几个解决思路:

  1. 正确初始化数组并维护有效元素数量
    先给数组设置一个合理的初始大小,同时用一个变量记录当前已经使用的数组位置,比如:

    String[] words = new String[100]; // 初始大小设为100
    Integer[] counts = new Integer[100];
    int currentSize = 0; // 记录已存储的单词数量
    

    搜索单词时,先判断words[i] != null再进行equals比较,避免空指针。

  2. 替换成HashMap(更推荐)
    其实你这个需求完全可以用HashMap<String, Integer>来实现,它天生就是用来处理“键-值”映射的场景,不仅不用操心数组扩容的问题,逻辑也更简洁:

    HashMap<String, Integer> wordCounter = new HashMap<>();
    // 假设你读取到了一个单词word
    if (wordCounter.containsKey(word)) {
        wordCounter.put(word, wordCounter.get(word) + 1);
    } else {
        wordCounter.put(word, 1);
    }
    

    这样根本不会出现数组相关的空指针问题,后期要遍历单词和计数也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:50:41