如何在Java String中删除所有"()和其中的文本"

Hus*_*bal 8 java regex string

我需要询问在Java String中删除括号和文本.例如,我有

String str = "I am a new (Software) Engineer"
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如何在不使用的情况下删除子串"(软件)"

str.replace("(software)", "")
Run Code Online (Sandbox Code Playgroud)

因为可能在下一个字符串中我会得到"我是一个新的(电气)工程师"或"(机械")或类似的东西.

所以我怎么能这样做,我认为一种方法是获得索引"("和")"并通过使用索引删除/替换它们但我希望有一些更短的方法来做到这一点

Boh*_*ian 25

使用正则表达式匹配括号中的任何内容:

str = str.replaceAll("\\(.*?\\) ?", "");
Run Code Online (Sandbox Code Playgroud)

请注意,括号必须进行转义,并且转义字符\本身必须在String中转义,因此需要反斜杠.

该术语.*?是一个不情愿的匹配,这意味着如果输入中有两个括号内的术语,它将不会一直跳到最后一个括号,即"a(foo)b(bar)c"将成为"a c" .*使用,因为它将消耗从第一个开放括号到最后一个关闭括号的所有内容.

我在末尾添加了一个可选空格,这样一旦删除了插入的术语,就不会留下两个相邻的空格.

  • 这并不理想:在`(文本(在另一个)括号中)`将只删除`(文本(在另一个中)`. (3认同)