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

使用正则表达式时触发java.lang.NullPointerException的原因排查

排查Java正则校验时的NullPointerException问题

嘿,我来帮你定位这个空指针异常的根源,其实问题很明确:你调用STAFFELNR.matches("[0-9]+")时,STAFFELNR的值是null——当你试图对一个null对象调用实例方法时,必然会触发java.lang.NullPointerException。

为什么会出现这种情况?

大概率是下面这两种场景之一:

  • 你的CsvScanner.values这个ArrayList本身是null?不过如果是这种情况,调用values.get(1)的时候就会直接抛空指针了,所以更可能是第二种情况:
  • CsvScanner.values的第二个元素(索引为1的位置)存储的就是null,比如读取CSV时这个单元格是空的,程序没有把它转换成空字符串,而是直接存了null进去。

怎么解决?

你需要在调用matches方法前先做null检查,同时最好也校验下values列表的合法性,避免索引越界的问题。修改后的代码可以参考下面的示例:

public static void scanSTAFFELNR() { 
    // 先校验ArrayList本身是否为空,以及元素数量是否足够获取第二个元素
    if (CsvScanner.values == null || CsvScanner.values.size() <= 1) {
        STAFFELNRMessage = "Fehler bei STAFFELNR: Keine gültige Datenquelle gefunden";
        Gui.fehlerCounter++;
        return;
    }
    
    String STAFFELNR = CsvScanner.values.get(1);
    // 先检查STAFFELNR是否为null,再执行正则校验
    if (STAFFELNR != null && STAFFELNR.matches("[0-9]+")) {
        System.out.println("erfolg");
    } else {
        // 区分null和格式错误的场景,也可以统一提示
        String errorMsg = STAFFELNR == null ? "STAFFELNR darf nicht leer sein" : "Fehler bei STAFFELNR, STAFFELNR muss zwischen 0-3 sein";
        STAFFELNRMessage = errorMsg;
        Gui.fehlerCounter++;
    }
}

另外,如果你是从CSV读取数据,建议在填充values列表的时候,把空单元格转换成空字符串("")而不是留作null,这样后续的字符串操作会更安全,能从源头减少空指针的触发概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:15:20