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