Reputation: 6775
I've used the following regex to try to remove parentheses and everything within them in a string called name
.
name.replaceAll("\\(.*\\)", "");
For some reason, this is leaving name unchanged. What am I doing wrong?
Upvotes: 10
Views: 24255
Reputation: 15738
In Kotlin we must use toRegex.
val newName = name.replace("\\(?.*?\\)".toRegex(), "");
Upvotes: 0
Reputation: 43
To get around the .*
removing everything in between two sets of parentheses you can try :
name = name.replaceAll("\\(?.*?\\)", "");
Upvotes: 1
Reputation: 68172
Strings are immutable. You have to do this:
name = name.replaceAll("\\(.*\\)", "");
Edit: Also, since the .*
is greedy, it will kill as much as it can. So "(abc)something(def)"
will be turned into ""
.
Upvotes: 33
Reputation: 31
I'm using this function:
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*", " ");
}
}
You can call it like this:
remove_parenthesis(g, "[]");
remove_parenthesis(g, "{}");
remove_parenthesis(g, "()");
Upvotes: 2
Reputation: 14679
As mentionend by by Jelvis, ".*" selects everything and converts "(ab) ok (cd)" to ""
The version below works in these cases "(ab) ok (cd)" -> "ok", by selecting everything except the closing parenthesis and removing the whitespaces.
test = test.replaceAll("\\s*\\([^\\)]*\\)\\s*", " ");
Upvotes: 11
Reputation: 272802
If you read the Javadoc for String.replaceAll()
, you'll notice that it specifies that the resulting string is the return value.
More generally, String
s are immutable in Java; they never change value.
Upvotes: 2
Reputation: 6623
String.replaceAll()
doesn't edit the original string, but returns the new one. So you need to do:
name = name.replaceAll("\\(.*\\)", "");
Upvotes: 4