使用Java Regex,如何在括号前后添加空格?

时间:2017-10-04 17:44:11

标签: java regex pattern-matching

我尝试了很多不同解决方案的解释

How to add space on both sides of a string in Java

Regex add space between all punctuation

Add space after capital letter

以及关于括号的其他内容(以及更多)

Regex to match parenthesis

我有一个字符串,我只想要这个:hi()

成为这个:hi()

到目前为止我尝试过:

if (phrase.matches("^.*[(].*$")){
            phrase.replaceAll("\\(", " \\( ");
        }

if工作正常,但replaceAll没有做任何事情。

我在线阅读我可能需要将以前的值放在replaceAll中,所以我尝试了以下

if (phrase.matches("^.*[(].*$")){
    phrase.replaceAll("(.*)\\(", " \\( ");
}

以及

    if (phrase.matches("^.*[(].*$")){
    phrase.replaceAll("(.*)\\(", "(.*) \\( ");
}

这个

if (phrase.matches("^.*[(].*$")){
        phrase.replaceAll("(.*)\\((.*)", "(.*) \\( (.*)");
    }

此时我觉得我只是在尝试随机的东西而且我在这里遗漏了一些小事。

2 个答案:

答案 0 :(得分:1)

replaceAll不会改变字符串。尝试

if (phrase.matches("^.*[(].*$")){
    System.out.println(phrase.replaceAll("\\(", " \\( "));
    // => f ( )
}

if (phrase.matches("^.*[(].*$")){
    phrase = phrase.replaceAll("\\(", " \\( "));
}

答案 1 :(得分:0)

在java中,字符串是不可变的。因此,您可能希望将replaceAll结果分配给变量。

phrase = phrase.replaceAll("\\(", " (");

此外,您的if条件可以省略,因为replaceAll只会在找到匹配项时替换字符串。