字符串操作 - 从字符串中删除char

Liz*_*ard 2 java regex string

我目前在java中有以下字符串:

"Blah, blah, blah,~Part One, Part Two~,blah blah"
Run Code Online (Sandbox Code Playgroud)

我需要删除~字符之间的逗号,以便读取.

"Blah, blah, blah,~Part One Part Two~,blah blah"
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

非常感谢,

pol*_*nts 5

    String[] tests = {
        "a,b,c,d,e,f",
        "a,b,~c~,d,e",
        "~a,b,c,d,e~",
        "a,b,c,~d,e,f~,g,h,i,~j,k,l,~m,n,o~,q,r,~s,t,u",
    };
    for (String test : tests) {
        System.out.println(
            test.replaceAll(
                "(^[^~]*~)|([^~]*$)|([^,~]*),|([^,~]*~[^~]*~)",
                "$1$2$3$4"
            )
        );
    }
Run Code Online (Sandbox Code Playgroud)

以上打印:

a,b,c,d,e,f
a,b,~c~,d,e
~abcde~
a,b,c,~def~,g,h,i,~jkl~m,n,o~qr~s,t,u
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

有4种情况:

  • 我们在字符串的开头,"外面"
    • 只是匹配,直到我们找到第一个~,所以下次我们将"在里面"
    • 所以, (^[^~]*~)
  • 没有更多~直到字符串的结尾
    • 如果有偶数~,我们将"在外面"
    • 只是匹配到最后
    • 所以, ([^~]*$)
  • 如果不是以上所述,我们就是"在里面"
    • 继续寻找下一个逗号~(所以我们仍然"在里面")
      • 所以,([^,~]*),(不要捕捉逗号!)
    • 如果我们找到~而不是逗号,那就出去吧,然后再回到下一个~
      • 所以, ([^,~]*~[^~]*~)

在所有情况下,我们确保捕获足以重建字符串.

参考

相关问题