2013-07-18 37 views
0

我想重新格式化一個字符串到我想要的格式。我一直試圖弄清楚這一點,但我想不出使用正則表達式的任何優雅的解決方案。我想出了一個使用String的indexOf()replace()的解決方案,但它並不完全漂亮。具體案例的Java正則表達式

我想轉換任何字符串,以便在「 - 」的每一邊都有一個空格。

可能的輸入:

"abc- abc" 
"abc -abc" 
"abc - abc" 
"abc-abc" 

和每種情況下應轉換爲

"abc - abc" 

感謝您的幫助。讓我知道你是否需要更多的澄清。

+0

即使您的初始解決方案不太好,您仍然應該將其顯示爲問題的一部分。這表明你至少嘗試了一些東西。 –

回答

1

使用String#replaceAll

String pattern = "\\s*-\\s*"; 
String s1 = "abc- abc"; 
String s2 = "abc -abc"; 
String s3 = "abc - abc"; 
String s4 = "abc-abc"; 
System.out.println(s1.replaceAll(pattern, " - ")); 
System.out.println(s2.replaceAll(pattern, " - ")); 
System.out.println(s3.replaceAll(pattern, " - ")); 
System.out.println(s4.replaceAll(pattern, " - ")); 

說明"\\s*-\\s*"正則表達式的:

  • \\s =>空間(實際上,是\s但Java需要雙\\
  • * => 0以上
  • - =>簡單的 ' - '

有關正則表達式的更多信息:Regular Expression Basic Syntax Reference

+0

呃,我是個白癡。我正在使用\\ S而不是\\ s,這就是爲什麼我的工作不正常。 – btse

1

最簡單的很可能是使用這種模式:

[ ]?-[ ]? 

像這樣:

str = str.replaceAll("[ ]?-[ ]?", " - "); 
2

使用\s*-\s*模式:

"abc- abc".replaceAll("\\s*-\\s*", " - ")) 
+0

這和我腦海中的想法完全一樣。 – Doodad