Detectar e encurtar TODOS os URLs na string

Suponha que eu tenha uma mensagem String:

"você deve fazer o upload de file.zip parahttp://google.com/extremelylonglink.zip, nãohttps://stackoverflow.com/extremelylonglink.zip. tente novamente."

Eu quero uma função para retornar ao newmessage String:

"você deve fazer upload de arquivo.zip para [versão resumida do primeiro link], não [versão reduzida do segundo link]. tente novamente."

Eu já tenho o código para o encurtador de URL e aqui está meu código de detecção de URL que substitui o primeiro URL em uma mensagem:

        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);
        }

Como eu iria substituir todos eles? (Eu estou usando a API Bukkit por muito disso, então muitas das funções não estão em Java).

Estou pensando em dividir a mensagem em uma matriz de palavras e, em seguida, avaliar se cada palavra seria uma URL, exceto que seria meio que não otimizada.

questionAnswers(1)

yourAnswerToTheQuestion