Обнаружить и сократить ВСЕ URL в строке
Предположим, у меня есть строковое сообщение:
«Вы должны загрузить файл .zip вhttp://google.com/extremelylonglink.zipнеhttps://stackoverflow.com/extremelylonglink.zip, Попробуйте еще раз."
Я хочу, чтобы функция возвращала String newmessage:
«Вы должны загрузить файл file.zip в [сокращенную версию первой ссылки], а не в [сокращенную версию второй ссылки]. попробуйте еще раз.»
У меня уже есть код для сокращения URL, и вот мой код обнаружения URL, который заменяет первый URL в сообщении:
if(message.contains("http://") || message.contains("https://")) {
String regex = "(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))";
Matcher m = Pattern.compile(regex).matcher(message);
if (m.find()) {
String url = m.group();
String shorted = null;
try {
shorted = Shortener.GetShortedISGD(url);
} catch (IOException e1) {
// TODO Auto-generated catch block
}
}
String intercepted = message.replace(url, shorted);
e.setMessage(intercepted);
}
Как бы я заменил ВСЕ из них? (Я использую Bukkit API для многих из них, поэтому многие функции не в Java).
Я подумываю о том, чтобы разделить сообщение на массив слов, а затем оценить, будет ли каждое слово URL-адресом, за исключением того, что это будет не оптимизировано.