2011-11-21 18 views

Odpowiedz

18

Ciągi są niezmienne. Trzeba to zrobić:

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

Edycja: Również, ponieważ .* jest chciwy, to zabić jak najwięcej jak to możliwe. Tak więc "(abc)(def)" zostanie zmieniony na "".

+0

Dziękuję bardzo. W moim konkretnym zgłoszeniu nie martwię się o zagnieżdżanie. – Daniel

+1

Właściwie, jak myślę o tym nieco więcej, zagnieżdżanie nie będzie problemem, ponieważ '. *' Jest domyślnie chciwy. Prawdziwym problemem jest ciągi takie jak '(abc) (def)', które zostaną całkowicie usunięte. –

+0

Również nie stanowi problemu w mojej sytuacji. Nigdy nie będzie więcej niż jednego zestawu nawiasów. – Daniel

2

String.replaceAll() nie edytuje oryginalnego ciągu, ale zwraca nowy. Więc trzeba zrobić:

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

Jeśli czytasz Javadoc for String.replaceAll(), można zauważyć, że określa, że ​​otrzymany ciąg jest wartością powrót.

Ogólnie rzecz biorąc, String s są niezmienne w Javie; nigdy nie zmieniają wartości.

6

Jak mentionend przez przez Jelvis "*" wybiera wszystko i nawróceni "(AB) (CD) OK" ""

Poniższa wersja działa w tych przypadkach "(ab) (cd) ok" -> "ok", wybierając wszystko poza nawiasem zamykającym i usuwając białe spacje.

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

To nie powiedzie się, gdy 'test =" (tekst (trochę więcej tekstu), a następnie trochę) "'. – Saheb

0

używam tej funkcji:

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*", " "); 
    } 
} 

można nazwać tak:

remove_parenthesis(g, "[]"); 
remove_parenthesis(g, "{}"); 
remove_parenthesis(g, "()"); 
Powiązane problemy