Java 字符串索引超出范围:9?

Java 字符串索引超出范围:9?,java,Java,我试图将“,”后面的字符串转换为整数 例如 输入 莎拉,49岁 输出 49 我希望输出是一个整数 NameandGrade = scan.nextLine(); length = NameandGrade.length(); coma=NameandGrade.indexOf(','); String StrMarks=NameandGrade.substring(coma+1,length+1); int Intmarks = Integer.parseInt(StrMarks);

我试图将“,”后面的字符串转换为整数 例如 输入 莎拉,49岁 输出 49 我希望输出是一个整数

NameandGrade = scan.nextLine();

length = NameandGrade.length();

coma=NameandGrade.indexOf(',');

String StrMarks=NameandGrade.substring(coma+1,length+1);

int Intmarks = Integer.parseInt(StrMarks);

System.out.println(marks);
我写了那段代码,但它在运行之后显示给我

字符串索引超出范围:9


你为什么不这样做

String[] splitted = NameandGrade.split(",");
String name = splitted[0];
int grade = Integer.parseInt(splitted[1]);

让我们看看变量逗号和长度的值

comma = 5
length = 8
方法子字符串的签名也是

String substring(int beginIndex,int endIndex)
参数在哪里 参数:

beginIndex - the beginning index, inclusive.
endIndex - the ending index, exclusive.
还可以对字符串的字符进行编号,以便更好地了解本例中的情况

 Sarah,49
 01234567
现在您可以看到,在本例中,我们需要将第二个参数作为last char+1的索引传递(因为它是独占的)。在本例中,它将是字符'9'的索引,即7。 但是您要传递的是length+1=9,它大于字符串的大小,并导致
StringIndexOutOfBoundsException
。 要更正is,需要传递值8(最后一个字符的索引+1,因为它是独占的)。在这种情况下,它将是=长度


因此,如果您将参数中的length+1改为length to substring方法,它将被修复。

阅读
String#substring
的文档并重新考虑
。substring(coma+1,length+1)
@MarounMaroun是的,我应该写。substring(coma+1,length)谢谢。显示替代解决方案很好,但指出当前的错误甚至更好。目的是帮助OP从错误中吸取教训。问题是你写的。但这是:String Intmarks=Integer.parseInt(StrMarks);同样也不行。@galovics谢谢,我在这里重写的时候犯了错误,但我知道我的错误,谢谢你添加新的信息,因为我是java的初学者。