2012-11-22 19 views
0

如何將算術表達式與空間分離,例如我有這個表達式22+(33 * 1)我想用同一個字符串中的運算符之間的空格拆分它們(返回一個字符串)像22 +(33 * 1)通過使用StringTokenizer的方式java:將算術表達式分解爲令牌

+1

你試過什麼嗎? –

+0

是試圖使用StringTokenizer與「」與「」分離,但它的結果是2 2 +(3 3 * 1)它是分離每個數字,我只是想分開它每個操作數像我上面所述 – lemoncodes

+0

一個低效的方法會用自己替換每個標記,然後用空格(使用'String.replaceAll'),然後用'\ x20 +'的正則表達式(使用'String.split')分割字符串。快速和骯髒,但可能會滿足您的要求。 –

回答

1

你的規則比你想象的要簡單。大概正確的java:

expr = expr.replaceAll('+', ' + ') 
      .replaceAll('-', ' - ') 
      .replaceAll(')', ') ') 
      //etc 
      .replaceAll(' ', ' '); //remove any double spaces added. 
+0

原始表達式中已經有空格時不起作用。你會介紹additinal的。 (這可能會被淘汰) – AlexWien

+0

這是關閉我所做的,雖然不是真的相同的代碼,但想法是 – lemoncodes

0

這並不容易。你必須解析表達式並且構建一個令牌樹。你最後表現得像 解析器。然後重新創建表達式並在 之間插入一個空格每個元素。
嘗試搜索解析算術表達式

+0

一旦他有樹,很難看出他爲什麼會想要回到線性字符串。奇怪的問題。 – EJP

+0

是的,奇怪的是,缺乏動力 – AlexWien

+0

即時通訊不構建樹,即時通訊只是用空格分隔每個操作數和操作符,構建樹是爲了我的程序的後期部分,即時通訊只是將它構建爲樹部分,簡單地說,我只是想操作符和操作符與空白基本上它只是字符串沒有任何其他strcuture – lemoncodes

0

您可以使用多個String.replaceAll語句用運算符用空格替換運算符。

+0

只是爲了澄清,你不需要*多個'replaceAll'表達式。它可以使用一個正則表達式和替換魔術來完成。 –