使用 charAt 的字符串索引越界

String Index Out of Bounds with charAt

作为一个学校项目,我被要求制作一个程序来显示您输入的姓名的首字母(例如。对于 Akshat Abhay Shetye,它将显示 A. A. Shetye)。

这在我的学校 PC 上工作正常,运行 是旧的 bluej 和 Java 但是当我 运行 它时抛出错误(StringIndexOutOfBoundsException:字符串索引超出范围)。 这是我的程序:

import java.util.*;
import java.lang.*;
public class dispInitials{
    public static void main (String args[]){
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your full name");
        String name = sc.next();
        //name = name.trim();
        String inName= name.charAt(0)+". ";
        int i = 1;
        for(i=1;i<(name.length()-1);i++){
            if(Character.isWhitespace(name.charAt(i)))
            break;
        }
        i++;
        inName=inName+name.charAt(i)+". ";
        for(i=i;i<name.length();i++){
            if(Character.isWhitespace(name.charAt(i)))
            break;
        }
        i++;
        System.out.println("The name is "+inName);
    }
}

谁能解释错误(第 16 行)?

for(i=1;i<(name.length()-1);i++)

所以,当循环停止时,i等于name.length - 1

那么,你在做

i++;
inName = inName+name.charAt(i)+". ";

所以您正在尝试访问索引 name.length 处的字符。但是没有这样的索引。最后一个有效索引是 name.length - 1。因此例外。

您需要学习使用调试器并逐行调试代码,同时检查变量的值。或者至少在代码中添加 System.out.println() 指令来诊断您的问题。这基本上是开发人员的日常工作。

你的名字输入错误。

用此代码替换您的输入行:

String name = sc.nextLine();