在java中替换正则表达式

时间:2013-11-01 08:33:32

标签: java regex

我正在尝试在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)

3 个答案:

答案 0 :(得分:3)

使用(\\d+)\\.(\\d+)代替(\\d*)\\.(\\d*)

你的正则表达式要求替换零个或多个数字后跟一个点,后跟零个或多个数字。因此 .CBT 中的匹配,因为它的两边都有一个零数字的点。

1JU3​​C_2.27.CBT有两个点,两边都有零个或多个数字。

如果您想将 5.67.8 等字符串转换为 5,67,8 ,请将延迟匹配用作(\\d+?)\\.(\\d+?)

答案 1 :(得分:1)

  

*

代表零次或多次,尝试用

替换它
  

+

答案 2 :(得分:0)

而是这样做:

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