2011-06-21 132 views
0

我有這樣的字符串:操縱以下字符串的最佳方法是什麼?

"{0}_something_{1}-{2}-something" 

,我需要這些字符串轉換爲

"%s_something_%s-%s-something" 

什麼是做到這一點的最好方法是什麼?

+0

有什麼邏輯嗎?何時添加下劃線? – Fortega

+0

下劃線沒有邏輯。只用%s替換所有的{0},{1}。我忘了string.replce與正則表達式。我在這裏得到了我的答案。謝謝 – AAaa

+1

然後將你的例子替換爲「我應該如何用'%s'替換所有'{0] ... {1} ...'等實例。 – mre

回答

4

我會使用正則表達式。

String data = "{0}something{1}-{2}-something"; 
System.out.println(data.replaceAll("\\{.*?\\}", "%s_")); 

輸出:

%s_something%s_-%s_-something

編輯: 一個RegExp,只有當有僅是數字{}之間

System.out.println(data.replaceAll("\\{\\d+\\}", "%s_")); 
+0

@dan:小心,這個解決方案會使'-'離開,另外,它不會只匹配大括號之間的數字,但是任何字符。看看我的答案是一個完整的測試解決方案。 – Shef

+0

@Shef。dan發佈的示例在輸出中仍然有'-',這就是爲什麼我沒有試圖刪除它。然而,發佈新的正則表達式只有當數字之間有'{}' – Kaj

+0

時,纔會匹配是的,那隻會匹配數字,好吧,如果他還想要'-',那就是他想要的;)好的工作 – Shef

6
myString.replaceAll("\\{\\d\\}", "%s") 

如果你想取代創造Ë一個Java格式字符串,那麼你應該可能保留這些替代品的順序,否則像foo {2} bar {1} baz {0}字符串將帶來問題:

myString.replaceAll("\\{(\\d)\\}", "%$1$$s"); 
+0

這個正則表達式並不代替什麼他想替換 – Kaj

+0

咦?他說他想要這個輸出'%s_something_%s-%s-something'我的正則表達式正在產生這個輸出。 – Kaj

+0

謝謝。但在「{」之前需要「\\」。否則你會得到PatternSyntaxException:非法重複。 – AAaa

1
String result = MessageFormat.format("{0}something{1}-{2}-something", "%s_", "_%s", "%s"); 
1
String str  = "{0}something{1}-{2}-something"; 
String clean = str.replaceAll("(\\{\\d+\\}-?)", "%s_"); 
System.out.println(clean); // outputs: %s_something%s_%s_something 
相關問題