gpt4 book ai didi

java - Streamtokenizer 读取非常大的数字?

转载 作者:行者123 更新时间:2023-12-01 04:18:30 24 4
gpt4 key购买 nike

我必须在 Java 中接受包含大量 10^9 阶的输入。如何快速处理输入?另外,由于streamtokenizer.nval给出了一个 double 值,我如何读取更大的值?

最佳答案

在解析之前,重置分词器语法表并初始化它以将数字识别为单词:

StreamTokenizer tokenizer = new StreamTokenizer(r);
tokenizer.resetSyntax();

tokenizer.whitespaceChars(0, 32);

tokenizer.wordChars('0', '9');
tokenizer.wordChars('-', '.');
tokenizer.wordChars('+', '+');
tokenizer.wordChars('a', 'z');
tokenizer.wordChars('A', 'Z');
tokenizer.wordChars(0xa0, 0xff); // not really needed here. */
tokenizer.slashSlashComments(true);
tokenizer.slashStarComments(true);

tokenizer.quoteChar('"');
tokenizer.quoteChar('\'');

然后,当遇到一个单词时,检查它是否可以解析为数字(这里有点粗糙,但它显示了总体思路):

...
case StreamTokenizer.TT_WORD:
if ("true".equals(tokenizer.sval)) {
result = Boolean.TRUE;
} else if ("false".equals(tokenizer.sval)) {
result = Boolean.FALSE;
} else if ("null".equals(tokenizer.sval)) {
result = null;
} else {
try {
result = Long.parseLong(tokenizer.sval);
} catch(NumberFormatException e) {
try {
result = Double.parseDouble(tokenizer.sval);
} catch (NumberFormatException e2) {
throw new IllegalStateException(
"Unexpected token: " + tokenizer.toString());
}
}
}
tokenizer.nextToken();
break;

这是否有效取决于用例:如果您想解析表达式(而不仅仅是像我这样的 JSON),您可能不想设置 +- 作为单词字符,但总体思路应该仍然有效,将它们视为一元运算符并在稍后阶段检测常量。

关于java - Streamtokenizer 读取非常大的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com