检测并缩短字符串中的所有URL

时间:2012-11-08 18:07:43

标签: java regex string url

假设我有一条String消息:

“你应该将file.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 个答案:

答案 0 :(得分:0)

使用appendReplacementappendTail。请参阅Java教程中的example,然后another example更接近您要执行的操作。