java.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个

java.lang.ArrayIndexOutOfBoundsException why am i getting this

为什么我会收到异常错误

va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException我为什么会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException为什么我得到这个va.lang.ArrayIndexOutOfBoundsException 为什么我得到这个

}

在你的比较中,你试图将单个字符与一个范围进行比较,这是你不能像 Java 中那样写的东西。你的语法看起来更接近正则表达式 ([a-zA-Z]) 而不是适当的 Java 比较。

如果你想检查一个变量的值是否在一个范围内,你需要比较它和它的边界:大于或等于左边,小于或等于右边。

public static boolean isValidChar_Q1(char chr) {
    return (chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z');
}

语法if(chr == 'a'-'z')不正确。 'a''z' 都是字符文字,但在 Java 中,字符是 16 位整数类型。所以'a'-'z'写的很长-25。我会简化逻辑和测试。像

public static boolean isValidChar_Q1(char chr) {
    char t = Character.toLowerCase(chr);
    return t >= 'a' && t <= 'z';
}

你写的'a'-'z'会转换成ASCII码减法,结果会是-25,而你的'A'-'Z'语句,结果会是(嗯,也是) -25.

你应该这样写

if( (chr <= 'z' && chr >= 'a') || (chr <= 'Z' && chr >= 'A') )
    return true;
return false;

永远记住,计算机使用 ASCII 代码,而不是“字符”,计算机将检查有效代码给定字符(总是正,-25无效),在我们的例子中,chr的ASCII码应该是smaller-or-equal到z,依此类推(参见上面的 if-statement)。

如果您熟悉重载 return 语句,您还可以简化您的函数(使其更具可读性):

return (chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z')

使用正则表达式的解决方案:

import java.util.regex. * ;

    boolean isMatch = Pattern.matches("[a-zA-Z]", "S");