我想用两者之间的标记替换所有出现的2个连续逗号(" ,,"),但我发现我无法替换第二次出现。代码如下:
String addresses = "a,,,b";
String b = addresses.replace(",,", ",EMPTYADDR,");
System.out.println(b);
我希望结果是:
a,EMPTYADDR,EMPTYADDR,b
但相反,我得到了:
a,EMPTYADDR,,b
我应该如何更改代码才能获得所需的结果?
答案 0 :(得分:3)
在replaceAll
函数中传递基于环绕声的正则表达式。 Lookarounds不会消耗任何字符,但断言是否可以匹配。
string.replaceAll("(?<=,)(?=,)", "EMPTYADDR");
(?<=,)
告诉正则表达式引擎查看所有逗号。 (?=,)
告诉正则表达式引擎匹配所有逗号之后存在的所有边界,只有它后跟另一个逗号。
因此正在匹配两个边界。通过用EMPTYADDR
替换匹配的边界将为您提供所需的输出。
答案 1 :(得分:3)
使用while
循环的简单非正则表达式方法
public static void main(String[] args) {
String addresses = "a,,,b";
while (addresses.contains(",,")){
addresses = addresses.replace(",,", ",EMPTYADDR,");
}
System.out.println(addresses);
}
结果:
a,EMPTYADDR,EMPTYADDR,b
您也可以拆分字符串,填充空元素,然后使用String.join()
重建
public static void main(String[] args) {
String addresses = "a,,,b";
String[] pieces = addresses.split(",");
for (int i = 0; i < pieces.length; i++) {
if (pieces[i].isEmpty()) {
pieces[i] = "EMPTYADDR";
}
}
addresses = String.join(",", pieces);
System.out.println(addresses);
}