2013-11-01 67 views
0

我試圖進行以下置換的Java正則表達式替換Java中

@Test 
public void testReplace(){ 
    String str = "1JU3C_2.27.CBT"; 
    String find = "(\\d*)\\.(\\d*)"; 
    String replace = "$1,$2"; 
    String modified = str.replaceAll(find, replace); 
    System.out.println(modified); 
    assertEquals("1JU3C_2,27.CBT", modified); //fails 
} 

但是兩者句號似乎越來越更換。我正在考慮只更換數字小數。 (即預期輸出1JU3C_2,27.CBT)

+0

什麼是實際輸出代替它? – LeeNeverGup

回答

3

使用(\\d+)\\.(\\d+),而不是(\\d*)\\.(\\d*)

您的正則表達式會要求替換零個或多個數字後跟一個點,後跟零個或多個數字。所以 in .CBT是匹配的,因爲它有一個兩邊都有零數字的點。

1JU3​​C_2.27.CBT有兩個零點或兩個以上的數字點。

如果你想字符串轉換像5.67.85,67,8使用延遲匹配爲(\\d+?)\\.(\\d+?)

0

而是做到這一點:

public void testReplace() 
{ 
    String str = "1JU3C_2.27.CBT"; 
    String modified = str.replaceFirst("[.]", ","); 
    System.out.println(modified); 
    assertEquals("1JU3C_2,27.CBT", modified); 
} 
+0

通過測試,但我需要使用正則表達式,以便輸入像1JU3C_227.CBT不會被錯誤地替換 – qwerty

+0

您想替換「。」。通過「,」只有當它發生不止一次......是嗎? –