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

Java提取姓名首字母时遭遇OutOfBoundsException的排查解决

解决StringIndexOutOfBoundsException:姓名首字母提取方法的问题

问题根源

  1. 输入读取错误:你用scnr.next()获取输入,这个方法只会读取到第一个空格为止。如果用户输入全名(比如"Alice Bob Smith"),你只能拿到"Alice",后续代码里name.indexOf(" ")会返回-1,调用substring(0, -1)就触发越界异常。
  2. 方法逻辑僵化:getInitials方法默认姓名一定包含名、中名、姓三个部分,没有处理姓名只有1个或2个部分的情况,只要输入不符合这个格式就会报错。

修正方案

步骤1:修复输入读取

把String name = scnr.next();改成String name = scnr.nextLine();,这样能读取用户输入的整行姓名,包含所有空格。

步骤2:重写getInitials方法

改用按空格分割姓名的方式,不管姓名有几个部分,都能提取每个部分的首字母。这样兼容性更强,能处理单名、双名、三名等各种情况。

修正后的完整代码

import java.util.Scanner;

public class Initials {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        
        System.out.println("Enter name : ");
        // 读取整行输入,包含空格
        String name = scnr.nextLine();
        
        String initials = getInitials(name);
        
        System.out.println("Initials for " + name + " : " + initials);
    }
    
    public static String getInitials(String name){
        // 按空格分割姓名,处理连续空格的情况(用正则"\\s+"匹配一个或多个空格)
        String[] nameParts = name.trim().split("\\s+");
        StringBuilder initialsBuilder = new StringBuilder();
        
        for(String part : nameParts){
            // 只处理非空的部分(避免分割后出现空字符串)
            if(!part.isEmpty()){
                // 取每个部分的首字母,转大写(可选,保证首字母大写)
                char initial = Character.toUpperCase(part.charAt(0));
                initialsBuilder.append(initial).append(". ");
            }
        }
        
        // 去掉最后多余的空格和点(如果有的话)
        if(initialsBuilder.length() > 0){
            initialsBuilder.setLength(initialsBuilder.length() - 2);
        }
        
        return initialsBuilder.toString();
    }
}

代码说明

  • trim():去掉姓名首尾的空格,避免分割出空字符串。
  • split("\\s+"):用一个或多个空格作为分隔符,处理用户输入多个连续空格的情况。
  • Character.toUpperCase():确保首字母是大写,即使输入的是小写也能正确输出。
  • StringBuilder:比字符串拼接更高效,尤其是处理多个姓名部分的时候。
  • 最后去掉末尾多余的". ",保证输出格式整洁。

这样修改后,不管输入是"Tom"、"Tom Hanks"还是"Tom Michael Hanks",都能正确提取首字母,不会触发越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:01:00