我正在尝试在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 :(得分:3)
使用(\\d+)\\.(\\d+)
代替(\\d*)\\.(\\d*)
。
你的正则表达式要求替换零个或多个数字后跟一个点,后跟零个或多个数字。因此 .CBT 中的。匹配,因为它的两边都有一个零数字的点。
1JU3C_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);
}