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

我可以更改将数字转换回字符串的方式,但是我真的很想首先不解析数字。我看到StreamTokenizer有一个parseNumbers()方法,该方法可以打开数字分析功能,但是似乎没有办法将其关闭。创建和配置与默认解析器相同但不解析数字的解析器,我该怎么做?

最佳答案

您可以通过调用StreamTokenizer,然后重新定义单词chars以包括数字来从resetSyntax()重置令牌定义。

下列:

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

字符串字面量
0.5

10-04 17:31