当我尝试比较斜线时,为什么java不会识别字符比较?

时间:2016-10-10 19:32:07

标签: java if-statement character interpreter

我正在尝试为新语言执行Java解释器,为此我需要对每个字符进行标记。我发现Jasic是一个用Java开发的已经开发的解释器,所以我将它作为指南使用。对于标记化器,我试图更改定义字符是注释的if语句。这是代码:

public static List<Token> tokenize(String source) {
    List<Token> tokens = new ArrayList<Token>();
    int n=0;

    String token = "";
    TokenizeState state = TokenizeState.DEFAULT;

    // Many tokens are a single character, like operators and ().
    String charTokens = "\n=+-*/<>()";
    TokenType[] tokenTypes = { TokenType.LINE, TokenType.EQUALS,
        TokenType.OPERATOR, TokenType.OPERATOR, TokenType.OPERATOR,
        TokenType.OPERATOR, TokenType.OPERATOR, TokenType.OPERATOR,
        TokenType.LEFT_PAREN, TokenType.RIGHT_PAREN
    };

    // Scan through the code one character at a time, building up the list
    // of tokens.
    for (int i = 0; i < source.length(); i++) {
        char c = source.charAt(i);
        switch (state) {
        case DEFAULT:
            if (charTokens.indexOf(c) != -1) {
                tokens.add(new Token(Character.toString(c),
                    tokenTypes[charTokens.indexOf(c)]));
            } else if (Character.isLetter(c)) {
                token += c;
                state = TokenizeState.WORD;
            } else if (Character.isDigit(c)) {
                token += c;
                state = TokenizeState.NUMBER;
            } else if (c == '"') {
                state = TokenizeState.STRING;
            } else if (c == '/'){ // This comparision won't work
                state = TokenizeState.COMMENT;
            }
            /* This is how is handled by Jasic
               that uses a single quote for comments
            else if (c == '\'') {
                state = TokenizeState.COMMENT;
            }*/
            break;

        case WORD:
        // Here is more code, but not relevant for this question
}

我已经尝试过比较字符和类型的哈希码,我也尝试使用Character.valueOf(c)来获取值并进行比较,如下所示:Character.valueOf(c) == '/'但没有任何效果。

我已经搜索了答案,但一切都是关于反斜杠的。所以,我的问题是,你知道为什么它不起作用吗?或者我错误地认为if声明不接受比较?

1 个答案:

答案 0 :(得分:0)

根据{{​​1}}和/变量,

charTokens是一个除法运算符。

这意味着它已由tokenTypes测试处理,因此charTokens.indexOf(c) != -1语句中的c永远不会是/

此外,else if不是评论的开头。 /是。