【转】java去除html代码中含有的html、js、css标签,获取文字内容
2023-09-11 14:22:19 时间
【原文】:https://blog.csdn.net/u010882234/article/details/80585175
/** * 去除文章内容页页面代码里的HTML标签 * Created by yanyl on 2018/6/4. */ public class DelTagsUtil { /** * 去除html代码中含有的标签 * @param htmlStr * @return */ public static String delHtmlTags(String htmlStr) { //定义script的正则表达式,去除js可以防止注入 String scriptRegex="<script[^>]*?>[\\s\\S]*?<\\/script>"; //定义style的正则表达式,去除style样式,防止css代码过多时只截取到css样式代码 String styleRegex="<style[^>]*?>[\\s\\S]*?<\\/style>"; //定义HTML标签的正则表达式,去除标签,只提取文字内容 String htmlRegex="<[^>]+>"; //定义空格,回车,换行符,制表符 String spaceRegex = "\\s*|\t|\r|\n"; // 过滤script标签 htmlStr = htmlStr.replaceAll(scriptRegex, ""); // 过滤style标签 htmlStr = htmlStr.replaceAll(styleRegex, ""); // 过滤html标签 htmlStr = htmlStr.replaceAll(htmlRegex, ""); // 过滤空格等 htmlStr = htmlStr.replaceAll(spaceRegex, ""); return htmlStr.trim(); // 返回文本字符串 } /** * 获取HTML代码里的内容 * @param htmlStr * @return */ public static String getTextFromHtml(String htmlStr){ //去除html标签 htmlStr = delHtmlTags(htmlStr); //去除空格" " htmlStr = htmlStr.replaceAll(" ",""); return htmlStr; } public static void main(String[] args){ String htmlStr= "<script type>var i=1; alert(i)</script><style> .font1{font-size:12px}</style><span>少年中国说。</span>红日初升,其道大光。<h3>河出伏流,一泻汪洋。</h3>潜龙腾渊, 鳞爪飞扬。乳 虎啸 谷,百兽震惶。鹰隼试翼,风尘吸张。奇花初胎,矞矞皇皇。干将发硎,有作其芒。天戴其苍,地履其黄。纵有千古,横有" + "八荒。<a href=\"www.baidu.com\">前途似海,来日方长</a>。<h1>美哉我少年中国,与天不老!</h1><p>壮哉我中国少年,与国无疆!</p>"; System.out.println(getTextFromHtml(htmlStr)); } }
main方法运行结果
少年中国说。红日初升,其道大光。河出伏流,一泻汪洋。潜龙腾渊,鳞爪飞扬。乳虎啸谷,百兽震惶。鹰隼试翼,风尘吸张。奇花初胎,矞矞皇皇。干将发硎,有作其芒。天戴其苍,地履其黄。纵有千古,横有八荒。前途似海,来日方长。美哉我少年中国,与天不老!壮哉我中国少年,与国无疆!
忽略下面这两段
修改之处,因为实际中有些文本比较特殊,比如用<>括起来的文本: <敢教日月换新天> ,上面的处理方式也会将这段当做是html标签,然后给处理掉了,对这句正则稍作修改即可,所以有特殊需求的,可以根据具体的需求进行修改
//定义HTML标签的正则表达式,去除标签,只提取文字内容
String htmlRegex="<[^>]+>";
改为: String htmlRegex="<[^>]+/>";
最后贴一段代码,供参考:
/** * 去除字符串中的html标签. * <p> * <pre> * StringUtils.replaceHtml(null) = "" * StringUtils.replaceHtml("") = "" * StringUtils.replaceHtml("<td>content</td>") = "content" * StringUtils.replaceHtml("<>content</td>") = "" * </pre> * * @param html 要处理的字符串,可以为 null * @return String * */ public static String replaceHtml(String html) { if (StringUtils.isBlank(html)) { return StringUtils.EMPTY; } String regEx = "<.+?>"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(html); String s = m.replaceAll(StringUtils.EMPTY); s = s.replaceAll("<[^>]*>", ""); return s; }
相关文章
- java虚拟机学习-Java常量池理解与总结(13-2)
- 10.Java 加解密技术系列之 DH
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"@"
- 优化 html 标签 为何能用HTML/CSS解决的问题就不要使用JS?
- java - 详解 Java 17 中新推出的密封类
- JS监听不到被操作后dom的事件,js动态生成的DOM绑定事件失效,解决方案
- 在 Ubuntu 20.04 上设置默认 Java 版本
- Java集合常见面试题汇总
- 34 异常机制 异常体系结构 Java把异常当做对象来处理 并定义一个基类java.lang.Throwable作为所有异常的超类 Error Exception
- 【Java】java: 无法访问org.testng.annotations.Test
- 《Java入门经典(第7版)》—— 6.10 测验
- Java Design Demo -简单的队列-异步多任务队列(java android)
- Error running 'dt-assets-monitor [clean]': Cannot run program "C:Program Files (x86)Javajdk1.8.0_73binjava.exe" (in directory "E:codedt-assets-monitor")
- js把预定义的html字符串转换为 HTML 实体 htmlspecialchars 输出html实体内容包括标签,而不自动转义标签,只显示内容,类似php的htmlspecialchars
- Java之静态代码块
- 【Laya + TS + JS】SheetJS(js-xlsx)前端生成Excel表格
- Java设计模式之行为型:策略模式
- 上机题目(0基础)- Java网络操作-Socket实现client和server端通信(Java)
- Java Interview Reference Guide--reference
- 搭建Nginx+Java环境
- Java //PP1.3 编写一个程序,分行显示你的名字、生日、爱好、最喜欢的书及最喜欢的电影。
- Java MyBatis配置详解