Обнаружить и сократить ВСЕ 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-адресом, за исключением того, что это будет не оптимизировано.

Ответы на вопрос(1)

Ваш ответ на вопрос