2011-11-21 3023 views

回答

18

字符串是不可变的。你必须这样做:

name = name.replaceAll("\\(.*\\)", ""); 

编辑:此外,由于.*是贪婪的,它会杀死尽可能多的,因为它可以。所以"(abc)(def)"将变成""

+0

非常感谢你。在我的特殊应用中,我并不担心嵌套。 – Daniel

+1

实际上,当我考虑更多时,嵌套将不会成为问题,因为'。*'默认为贪婪。真正的问题是像'(abc)(def)'这样的字符串将被完全删除。 –

+0

在我的情况下也不是问题。永远不会有一组以上的括号。 – Daniel

2

String.replaceAll()不编辑原始字符串,但返回新的字符串。所以,你需要做的:

name = name.replaceAll("\\(.*\\)", ""); 
2

如果你读了Javadoc for String.replaceAll(),你会发现,它指定生成的字符串是返回值

更一般地,String在Java中是不可变的;他们从不改变价值。

6

正如Jelvis mentionend由 “*” 选择一切,并转换 “(AB)OK(光盘版)”,以 “”

以下版本的作品在这些情况下 “(AB)OK(光盘版)” - >“确定”,通过选择除了右括号和删除空格之外的所有内容。

test = test.replaceAll("\\s*\\([^\\)]*\\)\\s*", " "); 
+0

当'test =“(文本(更多文本),然后更多)”'时,这会失败。 – Saheb

0

我使用这个功能:

public static String remove_parenthesis(String input_string, String parenthesis_symbol){ 
    // removing parenthesis and everything inside them, works for(),[] and {} 
    if(parenthesis_symbol.contains("[]")){ 
     return input_string.replaceAll("\\s*\\[[^\\]]*\\]\\s*", " "); 
    }else if(parenthesis_symbol.contains("{}")){ 
     return input_string.replaceAll("\\s*\\{[^\\}]*\\}\\s*", " "); 
    }else{ 
     return input_string.replaceAll("\\s*\\([^\\)]*\\)\\s*", " "); 
    } 
} 

你可以这样调用:

remove_parenthesis(g, "[]"); 
remove_parenthesis(g, "{}"); 
remove_parenthesis(g, "()"); 
相关问题