我使用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