我一直得到一个java.lang.StringIndexOutOfBoundsException

时间:2018-01-22 01:39:25

标签: java

我试图让用户插入一个至少3个字符的字符串,如果它甚至程序打印前半部分,如果它是奇数,程序打印中间3.我放置时继续收到此错误超过3个字符。

import java.util.Scanner;

public class Stringex {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.print("Please enter a string at least 3 characters long ");
String a = input.nextLine();


int numberofletters = a.length();

if (numberofletters < 3) {
    System.out.print("Sorry the string you entered is not long enough");
}
else if (numberofletters%2 == 0) {
    System.out.print(a.substring(0, numberofletters/2));
}
else {
    System.out.print(a.substring(numberofletters/2 - 1, numberofletters +2 ));
}


}

}

1 个答案:

答案 0 :(得分:2)

正如评论中所述,您的问题在于此声明:

else {
    System.out.print(a.substring(numberofletters/2 - 1, numberofletters +2 ));
}

查看subString的文档,您可以看到问题在于您传入的endIndex。由于numberofletters指的是字符串的长度,因此向其添加2将始终索引到字符串的结尾。

该文档还有助于显示subString可以抛出的异常以及在什么情况下:

  

抛出:   IndexOutOfBoundsException - 如果beginIndex为负数,或endIndex大于此String对象的长度,或者beginIndex大于endIndex。

[强调我的]