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

如何判断字符串数组仅含一个索引?单字符输入数组越界问题排查

问题解决:单字符输入时的数组越界异常处理

问题说明

输入单字符字符串(如"P")时,上述Java代码会抛出IndexOutOfBoundsException异常,期望此时能正常输出该字符;同时需要判断字符串数组是否仅包含一个元素。

错误原因

  • 判断字符串数组是否仅含一个元素的逻辑(breakdown.length == 1)是正确的,但后续处理忽略了单个元素本身长度为1的情况:当输入"P"时,name.length()为1,字符索引仅有0,代码中调用name.charAt(1)直接超出索引范围,触发异常。

修正方案

在数组长度为1的分支里,先判断单个元素的长度,分情况处理:

  • 若单个元素长度为1,直接取该字符作为结果
  • 若长度大于1,保持原逻辑取前两个字符(可根据实际需求调整)

修正后的代码:

class Test {
    public static void main(String[] args) {
        String initials = null;
        String name = "P";
        String[] breakdown = name.trim().split(" ");
        System.out.println("Length::: " + breakdown.length);
        
        if (breakdown.length == 1) {
            String singleSegment = breakdown[0];
            if (singleSegment.length() == 1) {
                // 单字符场景,直接输出该字符的大写
                initials = singleSegment.toUpperCase();
            } else {
                // 多字符单个名称,取前两个字符(保留原逻辑)
                initials = (singleSegment.charAt(0) + "" + singleSegment.charAt(1)).toUpperCase();
            }
            System.out.println("Initial if::: " + initials);
        } else if (breakdown.length > 1) {
            initials = (breakdown[0].charAt(0) + "" + breakdown[breakdown.length - 1].charAt(0)).toUpperCase();
            System.out.println("Initial else::: " + initials);
        }
    }
}

额外优化建议

  • 优先使用拆分后的breakdown[0]而非原name变量,避免原字符串前后空格未处理干净的问题(比如输入" P "时,trim后拆分的结果更准确)
  • 可以添加空值或空字符串的判断,进一步提升代码健壮性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:55:57