java - 检测并缩短字符串中的所有网址

标签 java regex string url

假设我有一条字符串消息:

“您应该将 file.zip 上传到 http://google.com/extremelylonglink.zip,而不是 https://stackoverflow.com/extremelylonglink.zip。请重试。”

我想要一个函数返回字符串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,除非这有点不优化。

最佳答案

使用appendReplacementappendTail。请参阅example在 Java 教程和 another example更接近您想要做的事情。

关于java - 检测并缩短字符串中的所有网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13295076/

相关文章:

java - 如何为 MERGE 语句发送适当的 HTTP 状态?

java - JFrame Swing 如何将弹出窗口的框架更改为看起来像 Windows 主题

Java:枚举 values() 和 valueOf(String)

c++ - 为什么我不能像这样替换字符串上的字符?

javascript - 正则表达式中/gi 的含义是什么?

java - 两个不同长度的字符串可以有相同的哈希码吗?

java - 写入输出时遇到问题 : Too many methods: 66024; max is 65536. 按包:错误

python - 我可以在一个 python 正则表达式查询中使用多个搜索条件来返回一个元组吗?

javascript - myString.replace( VARIABLE, "") ...... 但在全局范围内

c++ 没有匹配的构造函数?