public static void main(String[] args)
/**
* 过滤掉非指定保留的html元素,保留元素间的内容和指定的html。
*
* 这个方法没有对缺失的或未闭合的html元素做处理,
* 是假设字符串中的TYPE_CLASS、TYPE_CLASS1、SPAN标签都符合规范,
* 代码思路是让一个新建的StringBuffer类来保存过滤出来字符,
* 当遇到‘<’ 或 ‘>’时,截取当前位置后面或前面的字符串,并与指定保留的元素字符串进行比较,根据判断进行保存
*/
final String TYPE_CLASS = "span class=\"type-class\"";
final int TYPE_CLASS_LENGTH = TYPE_CLASS.length();
final String TYPE_CLASS1 = "span class=\"type-class1\"";
final int TYPE_CLASS_LENGTH1 = TYPE_CLASS1.length();
final String SPAN = "span";
final int SPAN_LENGTH = SPAN.length();
final String SPAN_OFF = "</span>";
final int SPAN_OFF_LENGTH = SPAN_OFF.length();
String str =
"sustained by <a href=\"http://www.springsource.com\">SpringSource</a>" +
" O(∩_∩)O哈哈~ <span class=\"type-class\">type-class</span>" +
", Spring delivers <span class=\"aaaaa\">SpringSource2</span>" +
"。< <span class=\"type-class1\">type->class1</span>啊啊";
StringBuffer sb = new StringBuffer(str.length());
boolean charBool = true; // 表示是否保存此字符
boolean tagBool = false; // 表示前面是否是指定保留的元素
for(int i=0; i<str.length(); i++){
char c = str.charAt(i);
if(c == '<'){
charBool = false;
String span = "";
String span1 = "";
/*
* TYPE_CLASS、TYPE_CLASS1中最长的那个标签的长度,小于字符串长度时,才于截取并赋值
* 否则,会是原在上面赋值的空串,作用是防止处理到字符串最后时,截取越界
*/
if(i+1+TYPE_CLASS_LENGTH1 < str.length()){
span = str.substring(i+1, i+1+TYPE_CLASS_LENGTH);
span1 = str.substring(i+1, i+1+TYPE_CLASS_LENGTH1);
}
String spanoff = str.substring(i, i+SPAN_OFF_LENGTH);
if(span.equalsIgnoreCase(TYPE_CLASS)
|| span1.equalsIgnoreCase(TYPE_CLASS1)){
tagBool = true; //这里的作用是当下一次的c == '<' </span>出现时,让下面的spanoff判断能执行
charBool = true;
sb.append(c);
}
// 判断是否指定保留元素的关闭标签,并配合tagBool,判断前面是否是指定保留元素,是则保存,以闭合元素
if(spanoff.equalsIgnoreCase(SPAN_OFF) && tagBool){
charBool = true;
sb.append(c);
tagBool = false;
}
}else if(c == '>'){
// 当元素结束时,判断是否是指定保留元素,是,则保存‘>’符
if(charBool)
sb.append(c);
// 当元素结束时,打开charBool,保存元素外的内容
charBool = true;
}else if(charBool){// true时,说明字符不在元素"<???>"里,是元素之间的内容,保存
sb.append(c);
}
}
System.out.println(sb);
过滤掉非指定保留的html元素,保留元素间的内容和指定的html
最新推荐文章于 2022-02-25 18:19:43 发布