Удалите все в скобках java с помощью regex
я использовал следующее регулярное выражение, чтобы удалить скобки и все в них в строке с названием name
.
name.replaceAll("(.*)", "");
по какой-то причине, это оставив имя прежним. Что я делаю не так?
5 ответов
строки неизменяемы. Вы должны сделать это:
name = name.replaceAll("\(.*\)", "");
Edit: кроме того, так как .*
жаден, он убьет столько, сколько сможет. Так что "(abc)(def)"
превращается в ""
.
а, предусмотренных на Jelvis, ".* "выбирает все и преобразует" (ab) ok (cd) "в""
версия ниже работает в этих случаях "(ab) ok (cd) "- > "ok", выбрав все, кроме закрывающей скобки и удалив пробелы.
test = test.replaceAll("\s*\([^\)]*\)\s*", " ");
String.replaceAll()
не изменять исходную строку, а возвращает новую. Поэтому вам нужно сделать:
name = name.replaceAll("\(.*\)", "");
Если вы читали Javadoc для String.replaceAll()
, вы заметите, что он указывает, что в результате строка возвращаемое значение.
в целом, String
s неизменяемы в Java; они никогда не изменяют значение.
Я использую эту функцию:
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, "()");