【发布时间】:2011-05-09 05:55:55
【问题描述】:
Java 的 StreamTokenizer 在识别数字方面似乎过于贪心。配置选项相对较少,我还没有找到一种方法让它做我想做的事。以下测试通过,IMO 在实现中显示了一个错误;我真正想要的是将第二个标记标识为单词“20001_to_30000”。有任何想法吗?
public void testBrokenTokenizer()
throws Exception
{
final String query = "foo_bah 20001_to_30000";
StreamTokenizer tok = new StreamTokenizer(new StringReader(query));
tok.wordChars('_', '_');
assertEquals(tok.nextToken(), StreamTokenizer.TT_WORD);
assertEquals(tok.sval, "foo_bah");
assertEquals(tok.nextToken(), StreamTokenizer.TT_NUMBER);
assertEquals(tok.nval, 20001.0);
assertEquals(tok.nextToken(), StreamTokenizer.TT_WORD);
assertEquals(tok.sval, "_to_30000");
}
FWIW 我可以改用 StringTokenizer,但它需要大量重构。
【问题讨论】:
-
我怀疑这是大多数语言禁止标识符中的第一个字符为数字的原因...
标签: java string tokenize string-parsing