我使用StreamTokenizer用循环替换了对String.split()的调用,因为我的用户需要引用功能。但是现在我遇到的问题是数字转换为数字而不是字符串。在我的循环中,如果我得到一个TT_NUMBER,我将它转换回一个带有Double.toString()的String。但这不适用于必须发送给我的一些长序列号;它们正在转换为指数表示法。
我可以改变将数字转换回字符串的方式,但我真的不想首先解析数字。我看到StreamTokenizer有一个parseNumbers()方法,它打开了数字解析,但似乎没有办法将其关闭。如何创建和配置与默认值相同但不解析数字的解析器?
答案 0 :(得分:4)
您可以通过调用StreamTokenizer
从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 foo string " literal 0.5