Java 从一段文本中识别 URL
# 需求描述
需要从一整段的文本中,识别出来其中的 URL 链接
# 解决方案
方案不唯一,可以纯正则去匹配。
本文演示的是以 url-detector 来解决本问题
Maven 坐标如下
<!-- https://mvnrepository.com/artifact/io.github.url-detector/url-detector -->
<dependency>
<groupId>io.github.url-detector</groupId>
<artifactId>url-detector</artifactId>
<version>0.1.23</version>
</dependency>
1
2
3
4
5
6
2
3
4
5
6
Java 中使用的示例代码如下
text 中的 \u 开头的,是emoji表情
public static void main(String[] args) {
String text = "\uD83C\uDFD6️开启\uD83D\uDD1B海南度假模式\n" +
"\uD83C\uDF89绝美西岛 新品上市\n" +
"\uD83D\uDCB0剑麻酒店2晚498起含早\n" +
"\uD83D\uDCF7赠价值699双人专业旅拍➕\n" +
" 度假区无限畅玩\n" +
"\uD83C\uDFAB超长有效期,快来囤货~\n" +
"\uD83D\uDC49http://tuniu.cc/t/pvSLwu"+
"\uD83D\uDC49tuniu.cc/t/pvSLwu";
// 中文正则 代码里面首先把中文都变成空格了,防止中文与英文网址在一起被错误识别
String regexChinese = "[\u4e00-\u9fa5]";
// 正则 emoji, 替换 emoji 防止对匹配结果产生影响
String regexEmoji = "[\ud800\udc00-\udbff\udfff\ud800-\udfff]";
text = text.replaceAll(regexChinese, " ");
text = text.replaceAll(regexEmoji, " ");
UrlDetector parser = new UrlDetector(text, UrlDetectorOptions.Default);
List<Url> found = parser.detect();
for (Url url : found) {
System.out.println(url.getOriginalUrl());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
输出如下
http://tuniu.cc/t/pvSLwu
tuniu.cc/t/pvSLwu
1
2
2
上次更新: 2023/01/10, 19:45:17