2012-01-13 56 views
1

我用一個使用StreamTokenizer的循環替換了對String.split()的調用,因爲我的用戶需要引用功能。但現在我遇到了數字轉換爲數字而不是字符串的問題。在我的循環中,如果我得到一個TT_NUMBER,我將它轉換回帶有Double.toString()的字符串。但是這不適用於一些必須發送給我的長序列號;他們正在轉換爲指數表示法。我如何從StreamTokenizer避開TT_NUMBER

我可以改變我將數字轉換回字符串的方式,但我真的很想僅僅解析數字。我發現StreamTokenizer有一個parseNumbers()方法,可以打開數字解析,但似乎沒有辦法關閉它。創建和配置與默認相同但不解析數字的解析器需要做些什麼?

回答

4

您可以通過調用resetSyntax()來重置StreamTokenizer中的令牌定義,然後重新定義字符以包含數字。

以下:

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