首页 > 解决方案 > 关键字的过滤字符串

问题描述

我有一个switch匹配不同的关键字长度。它在 Java 中不起作用:例如,给定一个 string class,具有确切的字符代码 U+63、U+6c、U+61、U+73 和 U+73 并且长度 = 5, str != "class"

private Token filterKeyword(String str)
{
    switch (str.length())
    {
        case 1:
            return null;
        case 2:
            return  str == "as" ? Token.AS :
                    str == "do" ? Token.DO :
                    str == "if" ? Token.IF :
                    str == "in" ? Token.IN :
                    str == "is" ? Token.IS : null;
        case 3:
            return  str == "for" ? Token.FOR :
                    str == "new" ? Token.NEW :
                    str == "try" ? Token.TRY :
                    str == "use" ? Token.USE :
                    str == "var" ? Token.VAR : null;
        case 4:
            if (str == "true")
            {
                token.booleanValue = true;
                return Token.BOOLEAN_LITERAL;
            }
            return  str == "case" ? Token.CASE :
                    str == "else" ? Token.ELSE :
                    str == "null" ? Token.NULL_LITERAL :
                    str == "this" ? Token.THIS_LITERAL :
                    str == "void" ? Token.VOID :
                    str == "with" ? Token.WITH : null;
        case 5:
            if (str == "false")
            {
                this.token.booleanValue = false;
                return Token.BOOLEAN_LITERAL;
            }
            if (str == "class")
            {
                System.out.println("class");
            }
            for (int i = 0; i != 5; ++i)
            {
                System.out.println(str.codePointAt(i));
            }
            return  str == "break" ? Token.BREAK :
                    str == "catch" ? Token.CATCH :
                    str == "class" ? Token.CLASS :
                    str == "const" ? Token.CONST :
                    str == "super" ? Token.SUPER :
                    str == "throw" ? Token.THROW :
                    str == "while" ? Token.WHILE :
                    str == "yield" ? Token.YIELD : null;
        case 6:
            return  str == "delete" ? Token.DELETE :
                    str == "import" ? Token.IMPORT :
                    str == "public" ? Token.PUBLIC :
                    str == "return" ? Token.RETURN :
                    str == "switch" ? Token.SWITCH :
                    str == "typeof" ? Token.TYPEOF : null;
        case 7:
            return  str == "default" ? Token.DEFAULT :
                    str == "finally" ? Token.FINALLY :
                    str == "package" ? Token.PACKAGE :
                    str == "private" ? Token.PRIVATE : null;
        case 8:
            return  str == "continue" ? Token.CONTINUE :
                    str == "function" ? Token.FUNCTION :
                    str == "internal" ? Token.INTERNAL : null;
        case 9:
            return  str == "interface" ? Token.INTERFACE :
                    str == "protected" ? Token.PROTECTED : null;
        case 10:
            return  str == "instanceof" ? Token.INSTANCEOF : null;
        default:
            return null;
    }
}

case 5:,我已经调试过这样的:

if (str == "class")
{
    System.out.println("class"); // not traced!
}
// prints the right character code sequence
for (int i = 0; i != 5; ++i)
{
    System.out.println(str.codePointAt(i));
}

标签: java

解决方案


推荐阅读