StreamTokenizer不会将+视为单词

时间:2016-03-29 18:09:57

标签: java stringtokenizer

代码

switch(token){

    case StreamTokenizer.TT_EOF:
        eof = true;
        break;
    case StreamTokenizer.TT_NUMBER:
        double value = tokenizer.nval;
        operands.add(value);
        break;
    case StreamTokenizer.TT_WORD:
        operate(tokenizer.sval);
        break;
    default:
        throw new WrongPhraseException("Unnexpected operator or operand: " + tokenizer.sval +".");
}

我输入RPN,例如:5 4 3 + *

为什么+不被视为TT_WORD,它不被视为它因此它抛出异常。

1 个答案:

答案 0 :(得分:0)

来自StreamTokenizer文档:

  

对于单个字符标记,其值为单个字符,转换为整数。

由于您的+字符是单个字符,因此可能被视为TT_NUMBER;您TT_NUMBER的案例陈述也需要处理这些案件。我认为同样适用于你的不带引号的*字符。因此你可以尝试这样的事情:

case StreamTokenizer.TT_NUMBER:
    Double value = new Double(tokenizer.nval);

    if (Character.isDigit(value.intValue()) {
        operands.add(value.doubleValue());

    } else {
        // Possibly dealing with operator here.  The hard/fun part is
        // in coercing that double value back to its tokenized string
        // form.
        operate(new Character((char) tokenizer.nval).toString());
    }

    break;

希望这有帮助!