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.

questionAnswers(1)

yourAnswerToTheQuestion