在replaceAll调用中修改正则表达式的一部分

问题描述 投票:1回答:1

我正在尝试使用正则表达式格式化字符串,如下所示:

String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0[^0-9]","");

我认为会发生的是字符串将成为:

5.07+122.14 //the regex will delete the .0+ next to the 12

如何创建正则表达式,使其仅删除.0而不删除+符号?

我更喜欢在“replaceAll”的同一个电话中做所有事情

谢谢你的任何建议

java regex replaceall
1个回答
3
投票

匹配的字符将被替换。因此,您可以使用lookahead来执行所需的检查,但不会消耗任何字符,而不是在末尾匹配非数字。此外,非数字的简写是\D,它比[^0-9]更好读:

String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0(?=\\D)","");

如果要替换所有尾随零(例如,将5.00替换为5而不是50,您可能不需要),则使用+重复0次,以确保小数点后的所有零都被替换:

String string = "5.07+12.000+2.14";
string = string.replaceAll("\\.0+(?=\\D)","");

如果字符串从不包含字母或下划线_字符(那些和数字字符计为单词字符),那么你可以使它更加漂亮,使用单词边界而不是前瞻。听起来,单词边界将匹配一侧的单词字符和另一侧的非单词字符的位置,使用\b

string = string.replaceAll("\\.0+\\b","");
© www.soinside.com 2019 - 2024. All rights reserved.