我正在尝试使用正则表达式格式化字符串,如下所示:
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
如何创建正则表达式,以便仅删除.strong而不是+符号?
我宁愿在同一通话中进行所有操作以“全部替换”
感谢任何建议
答案 0 :(得分:3)
匹配的字符将被替换。因此,您可以使用lookahead而不是最后匹配 非数字,它将执行所需的检查,但不会消耗任何字符。另外,非数字的简写为\D
,比[^0-9]
读起来更好:
String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0(?=\\D)","");
如果您想替换 all 尾随零(例如,将5.00
替换为5
而不是50
,这可能是您不希望的) ,然后用+
重复0一次或多次,以确保小数点后的所有零被替换:
String string = "5.07+12.000+2.14";
string = string.replaceAll("\\.0+(?=\\D)","");
如果字符串从不包含字母或下划线_
字符(这些字符和数字字符算作单词字符),则可以使其更漂亮,且带有单词边界而不是先行。听起来像是一个单词边界,该位置将在一侧与一个单词字符在另一侧与一个非单词字符与\b
相匹配的位置:
string = string.replaceAll("\\.0+\\b","");