Why does replaceAll remove the numbers from the String?

java, regex, replaceall, string

Solution

Your character class contains the range `'`..`_` which matches digits as well.

Put the `-` at the start or end of the character class:

foo.replaceAll("[,.;:?!'_\"/()\\{}-]", "")

or escape it:

foo.replaceAll("[,.;:?!'\\-_\"/()\\{}]", "");

Problem

``` String foo = "a3#4#b"; String afterPunctutationRemoval = foo.replaceAll("[,.;:?!'-_\"/()\\{}]", ""); System.out.println(afterPunctutationRemoval); ``` it gives me "a##b" as a result, can someone explain me why? Shouldn't it return the string as it is?

Original source