处理ArrayIndexOutOfBoundsException

时间:2018-03-27 08:27:44

标签: java exception exception-handling indexoutofboundsexception

我的问题:

我正在尝试在我的方法中处理ArrayIndexOutOfBoundsException。目前它接收用户输入的字符串,如果它匹配"^[a-zA-Z]*$"(字母/特殊字符),那么它应该保持循环。数组大小为[26]。当我输入27时,它应该捕获并处理此异常,但它只是抛出错误。

我该如何解决这个问题?

public String checkInput(String userInput) {

try {
        while (input.matches("^[a-zA-Z]*$")) {
            System.out.println("Please enter a number");
            userInput = sc.next();
        }
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("The input is invalid, please enter the answer again.");
        userInput = sc.next();
    }

    return userInput;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

在Java中,String的行为与数组不同。它是一个不可变的字符序列。变量只是对象的引用。所以

userInput = sc.next();

不会修改原始字符串。 userInput变量只是引用一个新字符串和ref。减少前一个字符串的计数。如果它达到0,它就会超出范围,以后会被垃圾收集。

不同地说,代码中的任何内容都不能引发ArrayIndexOutOfBoundsException

如果您想控制字符串不超过26,请使用其length方法:

if (userInput.length() > 26) {
    ...
}