我试图让用户插入一个至少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 ));
}
}
}
最佳答案
如评论中所述,您的问题与以下语句有关:
else {
System.out.print(a.substring(numberofletters/2 - 1, numberofletters +2 ));
}
查看subString的文档,您会发现问题与传入的endIndex有关。由于
numberofletters
指的是字符串的长度,因此向其添加2将始终在字符串的末尾进行索引。该文档还有助于显示subString可以抛出哪些异常以及在什么情况下:
抛出:
IndexOutOfBoundsException-如果beginIndex为负,或者endIndex大于此String对象的长度,或者beginIndex大于endIndex。
[强调我的]