`
zuzong
  • 浏览: 115180 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
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
7
分享到:
评论
2 楼 zuzong 2011-03-05  
写的时候,考虑过用indexof查一次,删一次,后来写着写着就不往这方面想了,晕 
1 楼 zuzong 2011-03-05  
我一开始用的stringbuffer,发现删除了那些不需要的html,但length还是以前的,也就是delete操作,只改变了缓冲区的数据,没刷到源里

相关推荐

    php过滤html标记属性类用法实例

    这个方法允许开发者指定哪些属性在过滤过程中可以被保留。 3. public function setException:设置特例,即某些标记即使被忽略过滤,也可以保留指定的属性。 4. public function setIgnore:设置忽略过滤的标记。...

    php过滤html标记属性类用法实例_.docx

    【PHP过滤HTML标记属性类】 在PHP中,处理和过滤HTML标记的属性是确保网站安全性的重要步骤,特别是防止跨...通过自定义允许的属性、特例和忽略的标签,可以实现对HTML内容的定制化过滤,以满足不同场景下的安全需求。

    JQ 过滤方法

    `.filter(selector)`则根据指定的选择器对当前元素集合进行过滤,返回匹配选择器的元素。此外,它还可以接收一个函数作为参数,函数会为每个元素执行,并根据返回值决定是否保留该元素。 ### 9. `.find(selector)` ...

    jQuery 第二课 操作包装集元素代码

    1. `html()` 和 `html(text)`:`html()`用于获取或设置包装集内第一个元素的HTML内容。当提供一个文本参数时,`html(text)`将所有元素的内部HTML替换为指定的文本。 2. `size()`:返回包装集中的元素数量。 3. `...

    HTML转换TXT的利器 html2txt4.0.rar

    - **自定义设置**:可能允许用户选择是否保留链接、图片描述等特定HTML元素。 - **多语言支持**:处理不同语言的HTML文档,确保转换后的TXT文件仍可正确阅读。 使用方法通常包括: 1. **解压**:首先需要将下载的...

    jQuery remove()过滤被删除的元素(推荐)

    这样,页面上只有那些没有`italic`类的`&lt;p&gt;`元素保留下来。 jQuery选择器可以是各种类型,包括但不限于ID选择器(#),类选择器(.), 标签选择器(*),属性选择器([attribute=value])等。这使得`remove()`方法能够适应...

    Jquery 高级过滤数据

    函数参数通常包含元素的索引和元素本身,可以根据这些信息返回布尔值决定元素是否保留。 ```javascript $('div').filter(function(index, element) { return $(element).text().indexOf('关键词') !== -1; }); ```...

    jQuery之过滤元素操作小结

    无论是按照索引筛选、按属性筛选、按内容筛选还是按类名筛选,这些过滤操作都能帮助开发者高效地找到所需的元素,从而进行进一步的操作,如样式修改、事件绑定或者内容更新等。掌握好这些过滤元素的方法,可以让前端...

    html网页扒取工具(html,css,js,img)

    HTML网页扒取工具是一种高效的方法,用于批量获取网页上的HTML、CSS、JavaScript和图像资源,大大简化了网页内容的下载和存储过程。这种工具对于网页设计师、开发者、数据抓取人员以及想要离线查看网页内容的用户来...

    几个有用的php字符串过滤,转换函数代码

    `explode()`函数将字符串按照指定的分隔符分割成数组,而`implode()`则是将数组元素连接成字符串。这两种函数在处理基于特定分隔符的文本数据时非常有用,比如在处理CSV文件或者日志文件时。 大小写转换是通过一组...

    JQuery框架方法事件大全

    - `filter()`:筛选匹配元素集合,根据表达式或函数返回的真值保留元素。 - `find()`:在匹配元素的后代中搜索指定的元素。 - `is()`:检查元素是否匹配给定的表达式。 - `next()`:获取匹配元素的下一个兄弟...

    Javascript获取相同CSS样式的元素

    首先,我们需要了解CSS选择器,这是JavaScript定位HTML元素的基础。CSS选择器可以基于元素类型、ID、类名、属性等来选取元素。例如,`div`选择器会选取所有的`&lt;div&gt;`元素,`#myID`会选取ID为`myID`的元素,`.myClass...

    JQuery常用方法

    - `$(”元素名称”).clone(布尔值)`: 克隆元素,可选参数决定是否保留事件绑定。 - `$(”元素名称”).insertAfter(content)`: 将元素插入到指定内容之后。 - `$(”元素名称”).insertBefore(content)`: 将元素...

    jquery实现从数组移除指定的值

    这个方法接受两个参数:第一个是要过滤的数组array,第二个是一个回调函数,这个函数对数组中的每个元素执行,并决定是否保留该元素。回调函数接受两个参数:元素的索引(index)和元素值(value)。最终,grep方法...

    javaweb过滤器

    - 可以通过`&lt;dispatcher&gt;`元素指定过滤器对哪些类型的请求进行过滤,例如`REQUEST`、`FORWARD`、`INCLUDE`等。 - 也可以通过`&lt;filter&gt;`和`&lt;filter-mapping&gt;`元素来配置多个过滤器的执行顺序。 #### 过滤器的简单...

    Angularjs之filter过滤器(推荐)

    AngularJS的filter过滤器是其核心特性之一,用于在数据绑定时对数据进行转换和处理。在AngularJS应用中,filter常被用来格式化数据、筛选数据或改变数据的显示方式,极大地提高了代码的可读性和用户体验。下面将详细...

    jQuery – 删除元素

    你可以提供一个选择器作为参数,来指定要删除的特定类型元素。比如,以下代码会删除页面上所有class为"italic"的段落: ```javascript $("p").remove(".italic"); ``` 在这个例子中,所有`&lt;p&gt;`标签中具有"class=...

    jquery常用方法

    - `filter(expression)`, `filter(filter)`: 过滤已选元素,保留满足条件的元素。 - `find(expr)`: 查找匹配expr的后代元素。 - `is(expr)`: 检查元素是否匹配expr。 - `next(expr)`: 获取元素的下一个兄弟元素...

    jquery常用功能一览表.doc

    - `filter()`, `not()`: 过滤元素集合,保留或排除匹配指定条件的元素。 - `is()`: 检查元素是否匹配给定的选择器。 5. **核心功能(Core)**: - `$()`: jQuery构造函数,可以用于选取DOM元素或创建新的jQuery...

    jquery函数大全

    - `filter(expression/filter)` 过滤集合,仅保留符合表达式的元素。 - `find(expr)` 查找子孙元素。 - `is(expr)` 检查元素是否匹配表达式。 - `next(expr)` 获取相邻的后续元素。 - `not(el/expr/elems)` ...

Global site tag (gtag.js) - Google Analytics