2011-11-21 83 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, "()"); 
相關問題