大家好,我是老坛。
相信大家都做过富文本的解析吧,无论是html还是xml都有各种纷繁复杂的标签,在解析的时候也是极为头疼。
1. 代码展示
最近题主写了一个非常好用的工具方法,大家可以直接拷走,用于自己的业务场景。
这里先粘出代码:
/**
* 根据前后标签获取target在source中的文本片段
* @param source 原文本
* @param target 要找的核心词
* @param preTag 前标签
* @param postTag 后标签
* @return
*/
public static List<String> getMiddleTextFromTags(String source, String target, String preTag, String postTag) {
List<String> resultList = new ArrayList<>();
Pattern pattern = Pattern.compile(String.format("([^%s]*%s[^%s]*)", preTag, target, postTag));
Matcher matcher = pattern.matcher(source);
while(matcher.find()) {
String result = matcher.group(1);
resultList.add(result);
}
return resultList;
}
大家可以直接拷贝到自己的工具类里面使用,下面我来介绍一下使用方法。
更多小工具请关注同名公众号:老坛聊开发
回复:"小轮子01" 即可获取!
2. 使用方法
该方法主要解决的是你在一段文本中截取某一段以特定符号开始并以特定符号结束并且又包含某个子串的字符串。这种场景最常见的就是我们截取html标签里面的内容。
光这么说大家估计很难理解,这里我来举个例子。
比如,对于某html文本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>大家好,这里是老坛,你找到我了吗?</title>
<!-- Bootstrap Core CSS -->
<link href="sbadmin2-1.0.7/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
</html>
假如我们想要在这段html文本中找到包含"老坛"的句子,但又不想带有这些html标签,那如果不用正则,可能只能疯狂split了,相信有小伙伴会有同感。但是如果用了老坛的方法,就非常简单了。
简单来说,这里实际上我们是要截取包含"老坛",但又在标签的尖括号外的字符串,所以可以理解为是以">"作为左边界,"<"作为右边界的字符串。那我们可以这样去调用方法:
List<String> resultList = getMiddleTextFromTags(source, "老坛", ">", "<")
如此,我们便可以得到我们想要的结果:
大家好,这里是老坛,你找到我了吗?
这里的返回结果是个list,如果有多处符合,那都会在list中。
3. 退化调用
当然我们也有只想截取以某个符号开头或结尾,但无所谓内容的场景。比如我们只想要截取title标签里面的字符串,但是里面不需要包含任何子串。
那这样的场景下我们可以这样去调用:
List<String> resultList = getMiddleTextFromTags(source, "", ">", "<")
只要将target传成空串就可以了,也可以得到结果:
大家好,这里是老坛,你找到我了吗?
是不是十分方便?
结论
这次老坛给大家介绍了一个比较方便的截取文本的小工具,希望可以给大家带来帮助!