检测并缩短字符串中的所有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.\\-]+[.][az]{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 。 请参阅Java教程中的示例以及更接近您尝试执行的操作的另一个示例 。