Java去除HTML标签的三种方法:正则、Jsoup与HTMLCleaner对比

方予
方予
发布时间:2026-10-15 | 3人浏览过
原创

在Java开发中,处理HTML数据时经常需要去除标签仅保留纯文本。本文详解了三种主流方案:基础的正则表达式替换、健壮的Jsoup解析库以及灵活的HTMLCleaner工具,并通过具体代码案例对比它们在处理复杂HTML(如含脚本标签、特殊字符)时的表现,帮助用户准确选择适合的技术路径。

使用正则表达式

从程序视角看,HTML本质上是一串包含固定格式字符串。使用正则表达式是移除标签最直接的方式,适用于结构简单、无嵌套逻辑干扰的场景。

第1步:构建基础正则规则

常见的匹配模式为 <[^>]> 或 <.*?>。需注意默认情况下正则可能进行贪婪匹配(如 <.*>),导致跨标签错误截断,因此建议使用非贪婪模式或非 > 字符匹配模式以确保精准定位单个标签。

第2步:执行文本替换并验证结果

使用 String.replaceAll() 方法调用上述正则。以下为例,假设我们有一个简单的HTML结构:

<!DOCTYPE html>
<html>
<head>
    <title>这是标题</title>
</head>
<body>
    <p>
        如果应用程序X没有启动,可能的原因是<br/>
        1. Maven没有安装<br/>
        2. 磁盘空间不足<br/>
        3. 内存不足
    </p>
</body>
</html>

对应的Java代码如下:

String html = "..."; // 加载上述HTML字符串
String result = html.replaceAll("<[^>]`>", "");
System.out.println(result);

运行后,控制台将输出剥离标签后的文本内容,虽然保留了部分原始空白,但核心文字已被提取。这种简单粗暴的方法在处理纯文本展示需求时效率较高。

第3步:识别正则处理的局限性

当HTML中包含 <script>、<style> 等包含业务逻辑或样式的标签时,简单移除标签会导致脚本内容泄露到文本中。此外,若文本内容本身包含 < 或 > 字符(例如数学公式或小于号表示),正则表达式极易发生误判或丢失数据。

为了演示这一缺陷,引入更复杂的HTML示例 example2.html,其中包含脚本标签和正文中的特殊符号:

<!DOCTYPE HTML>
<html>
<head>
    <title>这是标题</title>
</head>
<script>
    // some js function
</script>
<body>
    <p>
        如果应用程序X没有启动,可能的原因是<br/>
        1. <a id="link" href="http://maven.apache.org/" rel="external nofollow" >
            Maven
        </a> 没有安装<br/>
        2. 磁盘空间不足 (<1G) <br/>
        3. 内存不足(<64MB)<br/>
    </p>
</body>
</html>

对 example2.html 使用同样的正则替换后,输出结果不仅包含了JS注释,还因无法正确处理标签内的 < 字符而截断了部分关键文本(如“磁盘空间不足”后的内容变为“(< ”),证明正则并非解决所有HTML清洗问题的万能钥匙。

使用Jsoup

对于结构复杂的HTML,推荐使用成熟的HTML解析库Jsoup。它不仅能稳健地去除标签,还能自动忽略 <script> 等非可见元素,并保持语义完整性。

第1步:添加Maven依赖

在项目 pom.xml 中引入最新版本的Jsoup:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
</dependency>

第2步:调用API提取文本

直接复用上面的 example2.html 进行测试。只需一行核心代码即可完成解析:

String html = "..."; // 加载 example2.html
System.out.println(Jsoup.parse(html).text());

输出结果为:

这是标题 如果应用程序X没有启动,可能的原因是 1.Maven没有安装 2.没有足够的(<1G)磁盘空间 3.没有足够的(<64MB)内存

可以看出,Jsoup成功忽略了脚本内容,并且完整保留了正文中的特殊字符描述,同时在去除了HTML标记的同时也清理了不必要的换行符和空白,非常适合用于爬虫数据处理或富文本转纯文本的场景。

使用HTMLCleaner

如果需要更细粒度的控制,比如自定义哪些标签需要被修剪,或者需要保留原始文档的部分排版结构,HTMLCleaner 是一个优秀的备选方案。

第1步:配置项目依赖

在 pom.xml 中添加HTMLCleaner依赖:

<dependency>
    <groupId>net.sourceforge.htmlcleaner</groupId>
    <artifactId>htmlcleaner</artifactId>
    <version>2.25</version>
</dependency>

第2步:设置解析属性并执行

可以通过 CleanerProperties 对象来精细控制行为,例如手动指定跳过特定标签。以下代码展示了如何配置并清理HTML:

String html = "..."; // 加载 example2.html
CleanerProperties props = new CleanerProperties();
props.setPruneTags("script");
String result = new HtmlCleaner(props).clean(html).getText().toString();
System.out.println(result);

运行输出:

这是标题


如果应用程序X没有启动,可能的原因是:
1.Maven没有安装
2.没有足够的(<1G)磁盘空间
3.内存不足(<64MB)

结果显示,HTMLCleaner 同样过滤了脚本内容,并且相比Jsoup,它在一定程度上保留了原始的段落结构和空行信息(如 <br/> 带来的换行效果)。这使其在处理某些对格式有轻微要求的文本还原场景中更具优势。

总结

去除HTML标签虽看似简单,但在实际工程中需权衡速度与准确性。正则表达式适合轻量级、结构简单的文本快速清洗;Jsoup凭借强大的DOM解析能力,能稳妥应对复杂页面并过滤非视觉元素;而HTMLCleaner则在提供干净文本的同时,允许开发者通过属性配置精细干预解析过程。根据具体的数据结构需求和性能瓶颈,选择最适合的工具可显著提升代码的健壮性与维护性。

以上就是Java去除HTML标签的详细内容,更多关于Java HTML清洗技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表