我想在我的字符串的某些部分插入空格。 我正在寫一個計算器計算器。插入字符串的某些部分
例如,對於字符串
"23+45"
我希望它是"23 + 45"
。
或"1+(4*8)"
as "1 + (4 * 8)"
。
我這樣做,這樣我可以根據空間分割字符串,
我使用的調度場算法,所以我需要tokenise輸入。
我想在我的字符串的某些部分插入空格。 我正在寫一個計算器計算器。插入字符串的某些部分
例如,對於字符串
"23+45"
我希望它是"23 + 45"
。
或"1+(4*8)"
as "1 + (4 * 8)"
。
我這樣做,這樣我可以根據空間分割字符串,
我使用的調度場算法,所以我需要tokenise輸入。
很簡單。
"23+45".replaceAll("[+*()]", " $0 ").trim();
trim()
修剪任何尾隨空格。
您可以包括其他運營商像這樣:
"23+(45*-30/2)".replaceAll("[+*()-/]", " $0 ").trim();
+1。你忘了'-'(減號)和'/'(除)。 – 2012-01-10 10:19:24
這可能會導致字符串中出現多個空格,可以使用另一個'replaceAll'來代替修剪來修剪其他空格:''23 + 45「.replaceAll(」[ -/+ *()]「,」 $ 0「).replaceAll(」\\ s +「,」「);' – fivedigit 2012-01-10 10:21:51
@HarryJoy更新了我的答案,謝謝。但我認爲''不應該被空格隔開,如果用作符號的話。用它作爲操作符,空間很好。哪個更好看? '2 * -4'或'2 * - 4'? – adarshr 2012-01-10 10:22:49
的想法添加,因爲分裂字符串目的,比你還可以通過拆分算術運算符也用Class StringTokenizer
字符串的空間。 更多關於StringTokenizer
在現代Java中我沒有看到使用'StringTokenizer'的任何一點。 – adarshr 2012-01-10 10:29:56
這是一個你可以嘗試的例子: String msg =「1+(4 * 8)」; StringTokenizer st = new StringTokenizer(msg,「+ */- 」); (st.hasMoreTokens()){System.out.println(st。的nextToken()); – 2012-01-10 10:37:08
這就是我想說的。你必須寫4行,它仍然不給我最後的字符串。要做到這一點,你必須添加另外3行來使用'StringBuilder'。 – adarshr 2012-01-10 10:44:31
SavK,
插入令牌,然後再分析它們似乎是多餘的無用操作。 (上面的無反義,正則表達式解決方案只是簡短而且很好(我的+1))或者,您可以直接向Shunting Yard算法(需要令牌作爲輸入)提供令牌。
嘗試查看StreamTokenizer類(從JDK 1.0開始)解析令牌的表達式。它所做的所有分析都需要將令牌返回給您(甚至更多:將數字作爲整數數字令牌)。
這是原始演示。
package core;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;
public class Q {
public static void main(String[] args) {
StreamTokenizer stok = new StreamTokenizer(new StringReader("1+(40*8)"));
stok.parseNumbers();
try {
while(stok.nextToken() != StreamTokenizer.TT_EOF) {
System.out.println("nval: "+stok.nval);
System.out.println("sval: "+stok.sval);
System.out.println("ttype: "+stok.ttype);
System.out.println("toString: "+stok.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
你的問題是....和你的代碼,這嘗試這看起來像....但它確實....而不是你所期望的是.... ??? – 2012-01-10 10:13:58
現在我在輸入本身中插入空格。所以我還沒有真正的代碼。我已經編寫了程序的其餘部分,但那不是真的與此有關。 – saviok 2012-01-10 10:16:38