I have this regex which is supposed to remove sentence delimiters(. and ?):
sentence = sentence.replaceAll("\\.|\\?$","");
It works fine it converts
"I am Java developer." to "I am Java developer"
"Am I a Java developer?" to "Am I a Java developer"
But after deployment we found that it also replaces any other dots in the sentence as
"Hi.Am I a Java developer?" becomes "HiAm I a Java developer"
Why is this happening?
The pipe (|) has the lowest precedence of all operators. So your regex:
\\.|\\?$
is being treated as:
(\\.)|(\\?$)
which matches a . anywhere in the string and matches a ? at the end of the string.
To fix this you need to group the . and ? together as:
(?:\\.|\\?)$
You could also use:
[.?]$
Within a character class . and ? are treated literally so you need not escape them.
What you're saying with "\\.|\\?$" is "either a period" or "a question mark as the last character".
I would recommend "[.?]$" instead in order to avoid the confusing escaping (and undesirable result, of course).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With