在Java中使用replace和replaceAll替换连续的相同字符

在Java中使用replace和replaceAll替换连续的相同字符,java,string,replace,replaceall,Java,String,Replace,Replaceall,我想用中间的标记替换所有出现的两个连续逗号(“,”),但我发现无法替换第二个。代码如下: String addresses = "a,,,b"; String b = addresses.replace(",,", ",EMPTYADDR,"); System.out.println(b); 我预计结果是: a,EMPTYADDR,EMPTYADDR,b 但是,我得到的是: a,EMPTYADDR,,b 如何更改代码以获得所需的结果?在replaceAll函数中传递基于查找的正则表达式。L

我想用中间的标记替换所有出现的两个连续逗号(“,”),但我发现无法替换第二个。代码如下:

String addresses = "a,,,b";
String b = addresses.replace(",,", ",EMPTYADDR,");
System.out.println(b);
我预计结果是:

a,EMPTYADDR,EMPTYADDR,b
但是,我得到的是:

a,EMPTYADDR,,b

如何更改代码以获得所需的结果?

replaceAll
函数中传递基于查找的正则表达式。Lookarounds不会使用任何字符,但会断言是否可能匹配

string.replaceAll("(?<=,)(?=,)", "EMPTYADDR");

string.replaceAll(“(?使用
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()

publicstaticvoidmain(字符串[]args){
字符串地址=“a,,,b”;
String[]片段=地址。拆分(“,”);
对于(int i=0;i
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);
}