如何从StreamTokenizer中回避TT_NUMBER

时间:2012-01-13 20:22:37

标签: java parsing

我使用StreamTokenizer用循环替换了对String.split()的调用,因为我的用户需要引用功能。但是现在我遇到的问题是数字转换为数字而不是字符串。在我的循环中,如果我得到一个TT_NUMBER,我将它转换回一个带有Double.toString()的String。但这不适用于必须发送给我的一些长序列号;它们正在转换为指数表示法。

我可以改变将数字转换回字符串的方式,但我真的不想首先解析数字。我看到StreamTokenizer有一个parseNumbers()方法,它打开了数字解析,但似乎没有办法将其关闭。如何创建和配置与默认值相同但不解析数字的解析器?

1 个答案:

答案 0 :(得分:4)

您可以通过调用StreamTokenizerresetSyntax()重置令牌定义,然后重新定义单词字符以包含数字。

以下内容:

Reader r = new BufferedReader(new StringReader("123 foo \"string \\\" literal\" 0.5"));

StreamTokenizer st = new StreamTokenizer(r);

st.resetSyntax();
st.wordChars(0x23, 0xFF);
st.whitespaceChars(0x00, 0x20);
st.quoteChar('"');

while(st.nextToken() != StreamTokenizer.TT_EOF) {
  System.out.println(st.sval);
}

会打印:

123
foo
string " literal
0.5