Daniel
Daniel

Reputation: 6775

Remove everything in parentheses java using regex

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

Answers (7)

Sai
Sai

Reputation: 15738

In Kotlin we must use toRegex.

val newName = name.replace("\\(?.*?\\)".toRegex(), "");

Upvotes: 0

Hibiflobu
Hibiflobu

Reputation: 43

To get around the .* removing everything in between two sets of parentheses you can try :

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

Upvotes: 1

Tikhon Jelvis
Tikhon Jelvis

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

xyshio
xyshio

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

Pascalius
Pascalius

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

Oliver Charlesworth
Oliver Charlesworth

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, Strings are immutable in Java; they never change value.

Upvotes: 2

jli
jli

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

Related Questions