gpt4 book ai didi

Java StreamTokenizer 将不带空格的数字和字符作为单独的标记

转载 作者:太空宇宙 更新时间:2023-11-04 11:05:20 24 4
gpt4 key购买 nike

我正在使用StreamTokenizer编写一个解析器。我需要像 "8a" 这样的输入来回显数字包含字符的错误。相反,它打印:

NUM: 8 ID: a

它似乎将字符识别为单独的标记,即使没有空格分隔它们。

有解决办法吗?

最佳答案

您可以重写StringTokenizerparseNumbers方法来禁用对数字字符的特殊处理。请注意,这可能非常危险并且不合适。

根据 javadoc https://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html#parseNumbers() :

 * When the parser encounters a word token that has the format of a
* double precision floating-point number, it treats the token as a
* number rather than a word, by setting the {@code ttype}
* field to the value {@code TT_NUMBER} and putting the numeric
* value of the token into the {@code nval} field.

这里是示例 - 我没有向数字中使用的典型字符添加“数字”属性:

    final Reader rd = new StringReader("8a");
final StreamTokenizer tk = new StreamTokenizer(rd) {
@Override
public void parseNumbers() {
// super.parseNumbers(); - by not calling super. I disable special handling of numeric characters
}
};

tk.wordChars('a', 'z');
tk.wordChars('0', '9');
while ((tk.nextToken()) != StreamTokenizer.TT_EOF) {
if (tk.ttype == StreamTokenizer.TT_WORD) {
System.out.println("TT_WORD " + tk.sval);
}
if (tk.ttype == StreamTokenizer.TT_NUMBER) {
System.out.println("TT_NUMBER " + tk.nval);
}
}

输出:

TT_WORD 8a

通过上述配置,您可以获得一个 String 8a,然后执行 String.contains 来检查里面是否存在数字。

关于Java StreamTokenizer 将不带空格的数字和字符作为单独的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46536511/

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