条件检查中的Java特殊字符

l7wslrjt  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(75)

我有几行代码可以检查字符串中的括号。

while (index <= command.length()-1 && done == false) {
    if (command.charAt(index) == 123) { // ASCII value for open bracket
        braces++;
        token = token + command.charAt(index);
        index++;
    } else if (command.charAt(index) == 125) {
        braces--;
        token = token + command.charAt(index);
        index++;
    } else if (braces > 0) {
        if (command.charAt(index) > 47 && command.charAt(index) < 58 || command.charAt(index) > 64 && command.charAt(index) < 123) {
            token = token + command.charAt(index);
            index++;
        } else 
            index++;
    } else if (braces == 0) {
        if (command.charAt(index) > 47 && command.charAt(index) < 58) {
            token = token + command.charAt(index);
            index++;
            if (command.charAt(index) == 123)
                done = true;
            } else {
                index++;
                done = true;
            }
        }
    }
}

我的问题是这一行:if (command.charAt(index) == 123)
使用ASCII值检查a-Z和0-9的效果很好,但是当我单步调试时,括号的条件每次都失败。
像这样使用条件检查是非法的吗?

mw3dktmi

mw3dktmi1#

只需使用char原语:

if (command.charAt(index) == '['){ //Note the single quotes; double quotes won't work

产生更清晰的代码,并始终工作。

kwvwclae

kwvwclae2#

尝试运行此实验:

public class Test {
    public static void main(String[] args) {
        System.out.println(Character.getNumericValue('['));
    }
}

注意它返回-1。
来自API:
返回:字符的数值,为非负整数值;如果字符具有非负整数的数值,则返回-2;如果字符没有数值,则为-1。
所以正确的方法是
command.charAt(index) == '[',正如已经指出的。

相关问题