本文操作环境:windows7系统、java8.0&&html5版,dell g3电脑
java去掉html标签的各种姿势
一、背景业务开发中可能需要将html的标签全部去掉,本文将多种方法综合在这里,供大家参考。
二、方法2.1 纯正则方法import java.util.regex.matcher; import java.util.regex.pattern; public class htmlspirit{ public static string delhtmltag(string htmlstr){ string regex_script="<script[^>]*?>[\\s\\s]*?<\\/script>"; //定义script的正则表达式 string regex_style="<style[^>]*?>[\\s\\s]*?<\\/style>"; //定义style的正则表达式 string regex_html="<[^>]+>"; //定义html标签的正则表达式 pattern p_script=pattern.compile(regex_script,pattern.case_insensitive); matcher m_script=p_script.matcher(htmlstr); htmlstr=m_script.replaceall(""); //过滤script标签 pattern p_style=pattern.compile(regex_style,pattern.case_insensitive); matcher m_style=p_style.matcher(htmlstr); htmlstr=m_style.replaceall(""); //过滤style标签 pattern p_html=pattern.compile(regex_html,pattern.case_insensitive); matcher m_html=p_html.matcher(htmlstr); htmlstr=m_html.replaceall(""); //过滤html标签 return htmlstr.trim(); //返回文本字符串 } }
2.2 使用 javax.swing.text.html.htmleditorkitimport java.io.ioexception;import java.io.filereader;import java.io.reader;import java.util.list;import java.util.arraylist;import javax.swing.text.html.parser.parserdelegator;import javax.swing.text.html.htmleditorkit.parsercallback;import javax.swing.text.html.html.tag;import javax.swing.text.mutableattributeset;public class htmlutils { private htmlutils() {} public static list<string> extracttext(reader reader) throws ioexception { final arraylist<string> list = new arraylist<string>(); parserdelegator parserdelegator = new parserdelegator(); parsercallback parsercallback = new parsercallback() { public void handletext(final char[] data, final int pos) { list.add(new string(data)); } public void handlestarttag(tag tag, mutableattributeset attribute, int pos) { } public void handleendtag(tag t, final int pos) { } public void handlesimpletag(tag t, mutableattributeset a, final int pos) { } public void handlecomment(final char[] data, final int pos) { } public void handleerror(final java.lang.string errmsg, final int pos) { } }; parserdelegator.parse(reader, parsercallback, true); return list; } public final static void main(string[] args) throws exception{ filereader reader = new filereader("java-new.html"); list<string> lines = htmlutils.extracttext(reader); for (string line : lines) { system.out.println(line); } }}
【推荐:java视频教程】
2.3 使用jsoup框架import java.io.ioexception;import java.io.filereader;import java.io.reader;import java.io.bufferedreader;import org.jsoup.jsoup;public class htmlutils { private htmlutils() {} public static string extracttext(reader reader) throws ioexception { stringbuilder sb = new stringbuilder(); bufferedreader br = new bufferedreader(reader); string line; while ( (line=br.readline()) != null) { sb.append(line); } string textonly = jsoup.parse(sb.tostring()).text(); return textonly; } public final static void main(string[] args) throws exception{ filereader reader = new filereader ("c:/realhowto/topics/java-language.html"); system.out.println(htmlutils.extracttext(reader)); }
2.4 使用apache tikamport java.io.fileinputstream;import java.io.inputstream;import org.apache.tika.metadata.metadata;import org.apache.tika.parser.autodetectparser;import org.apache.tika.parser.parsecontext;import org.apache.tika.parser.parser;import org.apache.tika.sax.bodycontenthandler;import org.xml.sax.contenthandler;public class parsehtmlwithtika { public static void main(string args[]) throws exception { inputstream is = null; try { is = new fileinputstream("c:/temp/java-x.html"); writeoutcontenthandler contenthandler = new writeoutcontenthandler(100000000); metadata metadata = new metadata(); parser parser = new autodetectparser(); parser.parse(is, contenthandler, metadata, new parsecontext()); system.out.println(contenthandler.tostring()); } catch (exception e) { e.printstacktrace(); } finally { if (is != null) is.close(); } }}
注意这里经过本人实验有个小坑,writeoutcontenthandler参数是限制的字符数,这个如果不设置默认是1万,超过会报异常。
具体的jar包请自行到中央仓库里搜索依赖配置
https://search.maven.org/ 和 https://mvnrepository.com/
三、提供一个工具类可以将资源路径的文本类型文件(如json/html)读取成字符串
public class resourceutil { /** * 根据当前类路径,获取资源文件夹对应文件的所有字符串 * * @param currentclass 如 this.class * @param resourcepath 如 /data/json/xxx.json (相对于resources文件夹) */ public static string resource2string(class currentclass, string resourcepath) throws ioexception { return ioutils.tostring(new filereader(new file(currentclass.getresource(resourcepath).getfile()))); }}
四、总结这里提供了多种去除html标签的方式,建议先测试好再实际使用。
测试时读取资源文件可以使用第三节提供的工具类。
如果正则表达式无法满足你的需求,自己进一步优化即可。
如果其他方式仍然有特殊情况没有考虑到,可以自己先用正则去除这种特殊情况。
总之这里只是一种参考,提供了多种解决方案。
以上就是java怎么去掉html标签的详细内容。
