Ваша проблема в том, что вы используете -
в группе символов ([]
), не экранируя ее, что используется для определения диапазона .-?
(то есть символов ./0123456789:;<=>?
). Либо экранируйте его \\-
, либо поместите в конец класса символов, чтобы он не заканчивал диапазон.
public static String detectUrls(String text) {
String newText = text
.replaceAll("(?:https?|ftps?|http?)://[\\w/%.\\-?&=]+",
"<a href='$0'>$0</a>").replaceAll(
"(www\\.)[\\w/%.\\-?&=]+", "<a href='http://$0'>$0</a>");
return newText;
}