2011-03-29 88 views
0

我正在與StreamTokenizer解析文本,我需要確保 某些標記之間有空格。例如,「5 + 5」是非法的,但「5 + 5」是有效的。我不知道StreamTokenizer那麼好;我讀了API,但找不到任何東西來幫助我。我怎樣才能做到這一點?如何確保StreamTokenizer與特定令牌之間有空白?

+0

StringTokenizer更容易使用。 – 2011-03-29 21:40:32

回答

1

您必須將空格設置爲「普通字符」。這意味着它們將作爲標記自行返回,但不會摺疊到其他標記中。例如:

StreamTokenizer st = new StreamTokenizer(new StringReader("5 + 5")); 
st.ordinaryChar(32); 
int tt = st.nextToken(); // tt = TT_NUMBER, st.nval = 5 
tt = st.nextToken();  // tt = 32 (' ') 
tt = st.nextToken();  // tt = 43 ('+') 
tt = st.nextToken();  // tt = 32 (' ') 
tt = st.nextToken();  // tt = TT_NUMBER, st.nval = 5 
tt = st.nextToken();  // tt = TT_EOF 

不幸的是,您將不得不在分析器中處理空白標記。我建議你滾動你自己的tokenizer。除非你做的事快而骯髒,否則StreamTokenizer幾乎總是錯誤的選擇。

0

考慮使用Scanner來代替。例如爲:

String input = "5 + 5"; 
Scanner scanner = new Scanner(input).useDelimiter(" "); 
int num1 = scanner.nextInt(); 
String op = scanner.next(); 
int num2 = scanner.nextInt(); 

這是假定像"5+5""5 + 5"輸入一個簡化的例子。您應該隨時檢查scanner.hasNext(),也許在where循環中處理更復雜的輸入。