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

Java:访问字符串数组时触发ArrayIndexOutOfBounds异常

解决ArrayIndexOutOfBoundsException:split(".")导致的数组越界问题

嘿,我一眼就看出问题所在了——这是正则表达式里的经典小坑!

问题根源

你代码里的file.split(".")是罪魁祸首:

  • String.split()方法的参数是正则表达式,而.在正则中是匹配任意字符的元字符
  • 当你用"."作为分隔符时,它会匹配字符串里的每一个字符,导致拆分后的数组splitFile是空数组
  • 这时候你尝试访问splitFile[0]自然就会抛出ArrayIndexOutOfBoundsException: 0

修复方案

你需要对.进行转义,让它作为普通字符来处理,有两种安全的方式:

  1. 手动添加转义符(注意Java字符串里需要用双反斜杠\\):
String [] splitFile= file.split("\\.");
  1. 使用Pattern.quote()自动转义特殊字符(更推荐,避免手动转义出错):
String [] splitFile= file.split(Pattern.quote("."));

额外的优化建议

除了修复split的问题,你的代码还有可以完善的地方,避免其他潜在问题:

  • 处理文件名以.开头的情况(比如.gitignore),这时候split后的第一个元素是空字符串,需要额外判断
  • 简化校验逻辑,不用分情况处理带后缀和不带后缀的文件名,直接用正则匹配完整格式

优化后的完整代码示例:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Pattern pat = Pattern.compile("[a-zA-Z0-9]{1,8}");
    Matcher mat;
    String file = jTextField3.getText().trim(); // 先去除前后空格

    if (file.contains(".")) {
        String[] splitFile = file.split(Pattern.quote("."));
        // 确保拆分后有有效元素,且文件名部分不为空
        if (splitFile.length > 0 && !splitFile[0].isEmpty()) {
            mat = pat.matcher(splitFile[0]);
        } else {
            // 处理文件名以.开头的情况,比如".txt"
            mat = pat.matcher(""); // 或者自定义错误提示逻辑
        }
    } else {
        mat = pat.matcher(file);
    }

    // 添加校验结果的处理逻辑
    if (mat.matches()) {
        System.out.println("文件名格式合法");
    } else {
        System.out.println("文件名格式错误,需1-8位字母或数字");
    }
}

或者更简洁的方式,直接用正则匹配完整的文件名(支持带后缀):

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // 正则含义:1-8位字母/数字,后面可选跟.和任意后缀
    Pattern pat = Pattern.compile("^[a-zA-Z0-9]{1,8}(\\.[a-zA-Z0-9]+)?$");
    String file = jTextField3.getText().trim();
    Matcher mat = pat.matcher(file);

    if (mat.matches()) {
        System.out.println("文件名格式合法");
    } else {
        System.out.println("文件名格式错误,主文件名需1-8位字母或数字");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:00:58