繁体   English   中英

字符串索引超出范围与charAt

[英]String Index Out of Bounds with charAt

作为一个学校项目,我被要求制作一个显示您输入名称缩写的程序( 例如,对于 Akshat Abhay Shetye,它将显示AA Shetye)。

这在运行旧版bluej和Java的学校PC上运行良好,但是在运行它时抛出错误(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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM