zuzong 发表于 2013-1-26 15:50:21

过滤掉非指定保留的html元素,保留元素间的内容和指定的html

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);
页: [1]
查看完整版本: 过滤掉非指定保留的html元素,保留元素间的内容和指定的html