我已經使用了下面的正則表達式來嘗試去除括號和它們中的所有內容,其名稱爲name
。使用正則表達式去除括號中的所有內容
name.replaceAll("\\(.*\\)", "");
由於某種原因,這是離開名稱不變。我究竟做錯了什麼?
我已經使用了下面的正則表達式來嘗試去除括號和它們中的所有內容,其名稱爲name
。使用正則表達式去除括號中的所有內容
name.replaceAll("\\(.*\\)", "");
由於某種原因,這是離開名稱不變。我究竟做錯了什麼?
字符串是不可變的。你必須這樣做:
name = name.replaceAll("\\(.*\\)", "");
編輯:此外,由於.*
是貪婪的,它會殺死儘可能多的,因爲它可以。所以"(abc)(def)"
將變成""
。
String.replaceAll()
不編輯原始字符串,但返回新的字符串。所以,你需要做的:
name = name.replaceAll("\\(.*\\)", "");
如果你讀了Javadoc for String.replaceAll()
,你會發現,它指定生成的字符串是返回值。
更一般地,String
在Java中是不可變的;他們從不改變價值。
正如Jelvis mentionend由 「*」 選擇一切,並轉換 「(AB)OK(光盤版)」,以 「」
以下版本的作品在這些情況下 「(AB)OK(光盤版)」 - >「確定」,通過選擇除了右括號和刪除空格之外的所有內容。
test = test.replaceAll("\\s*\\([^\\)]*\\)\\s*", " ");
當'test =「(文本(更多文本),然後更多)」'時,這會失敗。 – Saheb
我使用這個功能:
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, "()");
非常感謝你。在我的特殊應用中,我並不擔心嵌套。 – Daniel
實際上,當我考慮更多時,嵌套將不會成爲問題,因爲'。*'默認爲貪婪。真正的問題是像'(abc)(def)'這樣的字符串將被完全刪除。 –
在我的情況下也不是問題。永遠不會有一組以上的括號。 – Daniel