Elikill58
Elikill58

Reputation: 4908

Unclosed character class while replacing string with regex

I want to remove a string at the beginning of another.

Example:

Begin Removed Final
"\n123 : other" Yes other
"123 : other" No Error
"\n4 : smth" Yes smth
"123 : a" No Error

Thanks to Regexr, I made this regex:

/[\\][n](?:[0-9]*)[ ][:]/g

I tried to use it in Java. With string.matches() I don't have any error. But, with string.replaceFirst, I have this error :

java.util.regex.PatternSyntaxException: Unclosed character class near index 24
/[\][n](?:[0-9]*)[ ][:]/g
                        ^

What I tried else ?

My full code:

String str = "\n512 : something"; // I init my string
if(str.matches("/[\\][n](?:[0-9]*)[ ][:]/g"))
   str = str.replaceFirst("/[\\][n](?:[0-9]*)[ ][:]/g", "");

How can I fix it ? How can I solve my regex pattern ?

Upvotes: 1

Views: 535

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627128

You can use

.replaceFirst("\n[0-9]+\\s+:\\s*", "")

The regex matches

  • \n - a newline char (you have a newline in the string, not a backslash and n)
  • [0-9]+ - one or more digits
  • \s+ - one or more whitespaces
  • : - a colon
  • \s* - zero or more whitespaces

See the Java demo:

List<String> strs = Arrays.asList("\n123 : other", "123 : other", "\n4 : smth", "123 : a");
for (String str : strs)
    System.out.println("\"" + str.replaceFirst("\n[0-9]+\\s+:\\s*", "") + "\"");

Output:

"other"
"123 : other"
"smth"
"123 : a"

Upvotes: 2

Related Questions