【发布时间】:2012-10-29 00:08:15
【问题描述】:
假设我有一个字符串消息:
“您应该将 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,除非这有点没有优化。
【问题讨论】: