2013-04-17 87 views
0

我想用字符串內的其他非數字字符替換非數字字符。例如在下面,改變如何用其他非數字字符替換非數字字符

4/14/2013%Univ. of Massachusetts-Amherst%Sacred Heart University%7-0 

4/14/2013%Univ. of Massachusetts-Amherst%Sacred Heart University%7%0 

我不想消除所有連字符,只是數字之間的人。我試圖用

line.replaceAll("-\\d+", "%\\d+"); 

,但與文字d+

+0

嘗試使用向前看符號和lookbehinds:http://www.regular-expressions.info/lookaround.html – Patashu

回答

1

變化代替了第二個數字的參數string.replaceAll()這個"-(\\d+)", "%$1",這裏$1意味着group 1通過(\\d+)

1

首先捕獲,你需要當你在JAVA中處理正則表達式時使用兩個反斜槓。在運行時,\\轉義序列將轉換爲單個反斜槓。現在,爲了「捕捉」一段初始表情,您需要使用capture groups。通過在圓括號中放入一段正則表達式,您可以「捕獲」要替換的字符串。所以最初的字符串應該是(\\d)-(\\d),其中第一個捕獲組是連字符前的數字,第二個是後面的數字。

要將這些數字替換回字符串中,您需要使用語法來捕獲它們,這在JAVA中是$。產生的字符串應該是$1%$2,意思是「捕獲組1,後面是%,後面是捕獲組2」。

你的代碼最終行將是這個樣子:

line.replaceAll("(\\d)-(\\d)", "$1%$2");