Wykryj i skróć WSZYSTKIE adresy URL w łańcuchu
Załóżmy, że mam wiadomość String:
„należy przesłać plik .zip dohttp://google.com/extremelylonglink.zip, niehttps://stackoverflow.com/extremelylonglink.zip. Spróbuj ponownie."
Chcę, aby funkcja powróciła do String newmessage:
„powinieneś wgrać plik.zip na [skróconą wersję pierwszego linku], a nie [skróconą wersję drugiego linku]. spróbuj ponownie.”
Mam już kod skrótu adresu URL i oto mój kod wykrywania adresu URL, który zastępuje pierwszy adres URL w wiadomości:
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);
}
Jak zmieniłbym WSZYSTKIE z nich? (Wiele z tego używam API Bukkit, więc wiele funkcji nie jest w Javie).
Myślę o podzieleniu wiadomości na tablicę słów, a następnie ocenie, czy każde słowo będzie adresem URL, z wyjątkiem tego, że nie będzie to zoptymalizowane.