繁体   English   中英

Java中的正则表达式替换

[英]Regex replacement in 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)

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

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

1JU3C_2.27.CBT的两个点的两边都有零个或多个数字。

如果要将5.67.8之类的字符串转换为5,67,8,请使用(\\\\d+?)\\\\.(\\\\d+?)惰性匹配。

*

代表零次或多次,请尝试将其替换为

+

而是这样做:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM