【问题标题】:StreamTokenizer doesn't treat + as wordStreamTokenizer 不将 + 视为单词
【发布时间】:2016-03-29 18:09:57
【问题描述】:

在代码中

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,它不被视为它所以它抛出异常。

【问题讨论】:

标签: java stringtokenizer


【解决方案1】:

来自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;

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多