手机
当前位置:查字典教程网 >编程开发 >Java >Java 批量删除html中注释内容的方法
Java 批量删除html中注释内容的方法
摘要:其实删除html文本中的注释有很多方法,这里就自己随便写了一个处理方法,权当笔记,有需要的同学可以参考。html文本的注释有几个特点:1.成...

其实删除html文本中的注释有很多方法,这里就自己随便写了一个处理方法,权当笔记,有需要的同学可以参考。

html文本的注释有几个特点:

1. 成对出现,有开始就一定有结束。

2. 注释标签没有嵌套,注释开始标签(以下称为 <>)。

3. 一行中可能有多个注释标签对儿。

4. 注释也可以换行。

大致有以下几种情况:

复制代码 代码如下:

<html>

<>

<head>A Head</head>

<>

<div>A Div</div>

<><><div>a div</div>

<div><span>A span</span><div>

<><div>A div</div><>

<div><span>A span</span><div>

<html>

思路:

1. 每次读取一行文本。

2. 如果该行中只包含<>,并且<> 之前。直接删除两标签之间的注释内容,获取其他内容。

3. 如果该行中只包含<>,但是<> 之后。获取两个标签之间的内容,并且标注已遇到<,获取标签前面的内容,并且标注已遇到<>,获取标签后面的内容,并且标注已遇到 --> 标签。

6. 对该行剩下的内容再执行2,3,4,5步骤。

7. 保存剩下的内容。

8. 读取下一行。

复制代码 代码如下: public class HtmlCommentHandler {

/**

* html内容中注释的Detector

*

* @author boyce

* @version 2013-12-3

*/

private static class HtmlCommentDetector {

private static final String COMMENT_START = "<>";

// 该字符串是否是html注释行,包含注释的开始标签且结束标签"<>"

private static boolean isCommentLine(String line) {

return containsCommentStartTag(line) && containsCommentEndTag(line)

&& line.indexOf(COMMENT_START) < line.indexOf(COMMENT_END);

}

// 是否包含注释的开始标签

private static boolean containsCommentStartTag(String line) {

return StringUtils.isNotEmpty(line) &&

line.indexOf(COMMENT_START) != -1;

}

// 是否包含注释的结束标签

private static boolean containsCommentEndTag(String line) {

return StringUtils.isNotEmpty(line) &&

line.indexOf(COMMENT_END) != -1;

}

/**

* 删除该行中的注释部分

*/

private static String deleteCommentInLine(String line) {

while (isCommentLine(line)) {

int start = line.indexOf(COMMENT_START) + COMMENT_START.length();

int end = line.indexOf(COMMENT_END);

line = line.substring(start, end);

}

return line;

}

// 获取开始注释符号之前的内容

private static String getBeforeCommentContent(String line) {

if (!containsCommentStartTag(line))

return line;

return line.substring(0, line.indexOf(COMMENT_START));

}

// 获取结束注释行之后的内容

private static String getAfterCommentContent(String line) {

if (!containsCommentEndTag(line))

return line;

return line.substring(line.indexOf(COMMENT_END) + COMMENT_END.length());

}

}

/**

* 读取html内容,去掉注释

*/

public static String readHtmlContentWithoutComment(BufferedReader reader) throws IOException {

StringBuilder builder = new StringBuilder();

String line = null;

// 当前行是否在注释中

boolean inComment = false;

while (ObjectUtils.isNotNull(line = reader.readLine())) {

// 如果包含注释标签

while (HtmlCommentDetector.containsCommentStartTag(line) ||

HtmlCommentDetector.containsCommentEndTag(line)) {

// 将成对出现的注释标签之间的内容删除

// <>

if (HtmlCommentDetector.isCommentLine(line)) {

line = HtmlCommentDetector.deleteCommentInLine(line);

}

// 如果不是注释行,但是依然存在开始标签和结束标签,结束标签一定在开始标签之前

// xxx -->content<!--

else if (HtmlCommentDetector.containsCommentStartTag(line) && HtmlCommentDetector.containsCommentEndTag(line)) {

// 获取结束标签之后,开始标签之前的文本,并且将 inComment设置为true

line = HtmlCommentDetector.getAfterCommentContent(line);

line = HtmlCommentDetector.getBeforeCommentContent(line);

inComment = true;

}

// 如果只存在开始标签,因为注释标签不支持嵌套,只有开始标签的行一定不会inComment

// content <!--

else if (!inComment && HtmlCommentDetector.containsCommentStartTag(line)) {

// 将 inComment 设置为true。获取开始标签之前的内容

inComment = true;

line = HtmlCommentDetector.getBeforeCommentContent(line);

}

// 如果只存在结束标签,因为注释标签不支持嵌套,只有结束标签的行一定inComment

// -->content

else if (inComment && HtmlCommentDetector.containsCommentEndTag(line)) {

// 将 inComment 设置为false。获取结束标签之后的内容

inComment = false;

line = HtmlCommentDetector.getAfterCommentContent(line);

}

// 保存该行非注释的内容

if (StringUtils.isNotEmpty(line))

builder.append(line);

}

// 保存该行不存在任何注释标签的并且inComment = false的行

if (StringUtils.isNotEmpty(line) && !inComment)

builder.append(line);

}

return builder.toString();

}

}

当然,还有其他很多的方法,也可以通过正则匹配删除,也可以通过Stack标记开始结束。

等等,以上代码经过测试使用,希望对有需要的同学有用。

【Java 批量删除html中注释内容的方法】相关文章:

java mail使用qq邮箱发邮件的配置方法

java中Filter过滤器处理中文乱码的方法

java 下执行mysql 批量插入的几种方法及用时

Java 替换字符串中的回车换行符的方法

使用Java获取html中Select,radio多选的值方法

java中删除数组中重复元素方法探讨

Java 使用poi把数据库中数据导入Excel的解决方法

Java调用.dll文件的方法

Java多线程下载的实现方法

java中数组的应用及方法

精品推荐
分类导航