关于截取带html标签的文字的前n个字符的处理(需求一)
来源:互联网 发布:java 备忘录 编辑:程序博客网 时间:2024/04/28 01:30
需求:
数据库中存储有一段带html标签的文字,如:
<P>《Windows》系统是越用越慢,这是不争的事实。</P> <P>因此,使用Win<font size='12pt'>d</font>ows就免不<img src='http:/www.blueidea.com/img/common/logo.gif'/>了要重新安装系统。<br>当然<span style='border:solid 1px red;font-size:23px'>,重新安装系</span>统并不难,但是安装完系统后你知道我<h1>们</h1>有多少事情必须要做吗?<br><strong>这</strong>可容不得丝毫的松懈,一旦马虎,将可能会导致前功尽弃,甚至有可能会造成数据丢失、信息泄密!</P>
现在要把它的前n个实际意义(即不包括html标签)的字符取出来,而且不能破坏它的段落标记,也就是说该是几段还是几段,p标签不算做n个字之内,又不能去掉
常见处:
新闻、小说、博客等的首页列表
代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HtmlTagRemove {
/**
* @function 出入口函数,获取文章的导读(前段文字)
* @param str 文章字符串
* @param length 导读长度
* @return 文章导读
*/
public String getNevigation(String str,int length){
//去掉除p以外的其他html标签
str = removeHtmlTagExceptP(str);
//获取导读
str = getHeadSubStr(str, length);
//补充导读中的P标签
str = repairPTag(str);
return str;
}
/**
* 函数说明:去掉p以外的其他标签
* @param 带html标签的字符串
* @return 处理后的字符串
*/
public String removeHtmlTagExceptP(String htmlstr) {
//正则说明:/s 空白字符, . 任何字符, * 零次或多次, ? 一次或一次也没有 ,*? 零次或多次 ,^ 除 之外
//Pattern pat = Pattern.compile("//s*<[^p].*?[^p]>//s*", Pattern.DOTALL | Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
Pattern pat = Pattern.compile("//s*</?+[^p].*?>//s*", Pattern.DOTALL | Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
////s?[s|Sc|Cr|Ri|Ip|Pt|T]
Matcher m = pat.matcher(htmlstr);
//去掉所有html标记
String rs = m.replaceAll("");
rs = rs.replaceAll(" ", " ");
rs = rs.replaceAll("<", "<");
rs = rs.replaceAll(">", ">");
return rs;
}
/**
* 函数说明:获取字符串的前一段文字
* @param str 目标字符串
* @param subLen 获取文字的长度
* @return 得到的字符串
*/
public String getHeadSubStr(String str,int subLen){
StringBuffer strBuffer =new StringBuffer();
int count=0;
for(int i=0;str!=null&&i<str.length();){
char c = str.charAt(i);
if(c=='<'&&str.charAt(i+1)=='p'&&str.charAt(i+2)=='>'){
strBuffer.append(c);
strBuffer.append(str.charAt(i+1));
strBuffer.append(str.charAt(i+2));
i+=3;
continue;
}
if(c=='<'&&str.charAt(i+1)=='/'&&str.charAt(i+2)=='p'&&str.charAt(i+3)=='>'){
strBuffer.append(c);
strBuffer.append(str.charAt(i+1));
strBuffer.append(str.charAt(i+2));
strBuffer.append(str.charAt(i+3));
i+=4;
continue;
}
strBuffer.append(c);
i++;
if(++count==subLen){
break;
}
}
return strBuffer.toString();
}
/**
* 方法说明:修补获取的字符串(主要是匹配p标签)
* @param str 目标字符串
* @return 修补后的字符串
*/
public String repairPTag(String str){
//判断截取的字符串p标签是否完整
String lastSubStr = str.substring(str.length()-3);
if(!lastSubStr.equals("</p>")){
str = str+"</p>";
}
return str;
}
}
- 关于截取带html标签的文字的前n个字符的处理(需求一)
- 关于截取带html标签的文字的前n个字符的处理(需求一)
- 关于截取带html标签的文字的前n个字符的处理(需求二)
- 截取字符串,只截取前N个字节的字符
- js截取前n个字节的字符串
- 截取带HTML标签的文本(面试题)
- substr()截取前5个字符后面省略号的方法
- js截取一定长度的字符,文字设置成2个字符截取
- 截取带HTML的内容
- struts2 标签截取字符串 struts2-在jsp页面中控制只显示前n个字符
- struts2 标签截取字符串 struts2-在jsp页面中控制只显示前n个字符
- struts2 标签截取字符串 struts2-在jsp页面中控制只显示前n个字符
- 关于含有HTML标签格式的文章截取功能实现
- [字符串]strncasecmp() -- 比较字符串的前n个字符
- 实现字符串(char*)的前N个字符放到后面
- Oracle截取指定字符前的字符串
- java截取带html标签的字符串并把标签补全(保证格式)
- java截取带html标签的字符串,再把标签补全(保证页面显示效果)
- WSAEventSelect()
- 国人花费3年半时间创作的超牛原创动画!!打,打个大西瓜
- 51转AVR
- 哈工大对抗甲流-2
- 山寨机主,警惕你手机里的小偷
- 关于截取带html标签的文字的前n个字符的处理(需求一)
- 邹建通用分页存储过程
- oracle 中的 exception
- 鼠标拖动层移动
- 从字典反推字符集顺序
- DOM SAX JAXP DOM4J JDOM xerces解析器
- 通用sqlserver分页存储过程
- Linux下流媒体服务器安装配置(图)
- 蜂鸟Web即时聊天产品定制方案