- 浏览: 10449 次
最新评论
java截取带HTML标签的字符串,一般情况下有三种实现方式:
1、在截取字符串函数中对HTML标签进行闭合(对标签作入栈出栈式处理即可)。
2、过滤掉HTML。
3、如果需要保留样式的话,可以按照格式提取各节内容,然后分别截取之后再重新用HTML做出表现样式。
1和2的方法不够好。因为1在截取长度时,是边所有的HTML标签都计算在内的,如果有的内容包含HTML标签较多,哪它实际的正文内容就得少了。所以不同内容可能表现长度不一,视觉效果不好。而2,没有格式,当然不可取。所以相对来说, 3比较好些。先提取内容然后再将内容补全,具体实现代码如下: package string; public class TagsList { private String[] data; private int size = 0; public TagsList(int size) { data = new String[size]; } public TagsList() { this(10); } public void add(String str) { ensureCapacity(size + 1); data[size++] = str; } public String get(int index) { if(index oldCapacity) { int newCapacity = (oldCapacity * 3 / 2 + 1) > minSize ? oldCapacity * 3 / 2 + 1 : minSize; String[] newArray = new String[newCapacity]; for(int i = 0; i 字符串,再把标签补全(保证页面显示效果)
* 一般是用在字符串中有html标签的截取.如: 后台发布用了在线编辑器, 前台显示内容要截取的情况.
* * @author YangJunping * @date 2010-7-15 */ public class SubStringHTML { public static void main(String[] args) { String htmlCode = "新华网北京7月13,.北京7--月13"; System.out.println(subStringHTML(htmlCode, 5)); // 测试结果:新华网 } /** * 按子节长度截取字符串(支持截取带HTML代码样式的字符串)
* 如:中国人发在线 当截取2个字节得到的结果是:中国 * * @param param * 将要截取的含html代码的字符串参数 * @param length * 截取的字节长度 * @return 返回截取后的字符串 * @author YangJunping * @date 2010-7-15 */ public static String subStringHTML(String param, int length) { StringBuffer result = new StringBuffer(); int n = 0; char temp; boolean isCode = false; // 是不是HTML代码 boolean isHTML = false; // 是不是HTML特殊字符,如 for(int i = 0; i ' && isCode) { n = n - 1; isCode = false; }else if(temp == ';' && isHTML) { isHTML = false; } if(!isCode && !isHTML) { n = n + 1; // UNICODE码字符占两个字节 if((temp + "").getBytes().length > 1) { n = n + 1; } } result.append(temp); if(n >= length) { break; } } return fix(result.toString()); } /** * 补全HTML代码
* 如:中国 ---> 中国 * * @param str * @return * @author YangJunping * @date 2010-7-15 */ private static String fix(String str) { StringBuffer fixed = new StringBuffer(); // 存放修复后的字符串 TagsList[] unclosedTags = getUnclosedTags(str); // 生成新字符串 for(int i = unclosedTags[0].size() - 1; i > -1; i--) { fixed.append(""); } fixed.append(str); for(int i = unclosedTags[1].size() - 1; i > -1; i--) { String s = null; if((s = unclosedTags[1].get(i)) != null) { fixed.append(""); } } return fixed.toString(); } private static TagsList[] getUnclosedTags(String str) { StringBuffer temp = new StringBuffer(); // 存放标签 TagsList[] unclosedTags = new TagsList[2]; unclosedTags[0] = new TagsList(); // 前不闭合,如有而前面没有 unclosedTags[1] = new TagsList(); // 后不闭合,如有而后面没有 boolean flag = false; // 记录双引号"或单引号' char currentJump = ' '; // 记录需要跳过''还是"" char current = ' ', last = ' '; // 当前 & 上一个 // 开始判断 for(int i = 0; i current = str.charAt(i++); // 读取标签 while(i ') { temp.append(current); current = str.charAt(i++); } // 从tags_bottom移除一个闭合的标签 if(!unclosedTags[1].remove(temp.toString())) { // 若移除失败,说明前面没有需要闭合的标签 unclosedTags[0].add(temp.toString()); // 此标签需要前闭合 } temp.delete(0, temp.length()); // 清空temp }else { // 标签的前部分,如 last = current; while(i ') { temp.append(current); last = current; current = str.charAt(i++); } // 已经读取到标签,跳过其他内容,如跳过id=test while(i ') { last = current; current = str.charAt(i++); if(current == '"' || current == '\'') { // 判断引号 flag = flag ? false : true; currentJump = current; if(flag) { // 若引号不闭合,跳过到下一个引号之间的内容 while(i ') // 判断这种类型: unclosedTags[1].add(temp.toString()); temp.delete(0, temp.length()); } } }else { while(i < str.length() && str.charAt(i++) != currentJump) ; // 跳过引号之间的部分 flag = false; } } return unclosedTags; } }
发表评论
-
linux常用命令
2012-07-06 09:46 748一、 vi使用场景&常用命令 命令 含义 vi ... -
java组件的透明问题
2012-07-03 13:44 524记得有不少人质疑java透明方面的能力,也有很多人到处找怎 ... -
SWFAddress实现Flex深度链接(不同模块具有不同的URL)
2012-07-02 13:27 553众所周知,Flex明显区别于传统B/S开发模式的特性中,有 ... -
Flex之数据格式化
2012-07-02 13:27 623数据格式化是对某些特殊的数据的格式进行规范。例如,日期格式 ... -
使用FLEX的HttpService与ASP.NET进行动态交互之一(转载)
2012-07-02 13:27 611使用FLEX的HttpService ... -
Flex 动态datagrid的应用
2012-07-02 13:27 595Flex有2种常用的datagrid: ... -
Flex TXT文件导入
2012-07-02 13:27 656在上一篇文章中,我们做了一个文件上传、导入组件,其实就是一 ... -
Get android source
2012-07-01 10:54 600狗日的csdn,改个名字还要积分!! ... -
[tamarin系列之9] 在线的eval
2012-07-01 10:54 596文章分类:Java编程 我们先做一个实验: 1、构建 ... -
JAVA+fms
2012-07-01 10:54 550最近完成的 Java Flex Fms 视频聊天程序,虽然 ... -
flash builder 制作 浏览器并 读写配制文件
2012-07-01 10:54 677flex/spark" xmlns:mx=&q ... -
采用数据库为Flex Tree组件的提供数据-前言
2012-06-30 17:15 606采用数据库为Flex Tree组件的提供数据-前言 2010 ... -
[转载]每天学一点Flex(1):DataGrid组件分页
2012-06-30 17:15 566[转载]每天学一点Flex(1):DataGrid组件分页 ... -
Flex: DataGroup 组件增加滚动条
2012-06-30 17:15 720Flex: DataGroup 组件增加滚动条 2011年0 ... -
TWaver Flex与.net最新版,三大视图组件齐备
2012-06-30 17:15 610TWaver Flex与.net最新版,三大视图组件齐备 2 ...
相关推荐
解决截取字符串中带有汉字的问题,以防截取时汉字截取一般出现错误情况
SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串
自己输入一个字符串,字符串中可以包括字符和汉字,截取指定的字符串
java 字符串截取工具类java 字符串截取工具类
按字节长度截取字符串(支持截取带HTML代码样式的字符串) ,补全不完整的HTML代码
第二个是把所有的符合条件的字符串都截取出来,提取出来,比如字符串 string a="ab123456,"ab323456",那么就只要截取2到4之间的字符串,然后存入到了一个列表里,想提取直接读取列表就可以了,非常方便实用哦。
关于java按字节截取带有汉字的字符串的解法.不错的一个程序。我也是从高手那拿来的,觉得不错,传上来给感兴趣的朋友学习学习。
本文实例讲述了php截取html字符串及自动补全html标签的方法。分享给大家供大家参考。具体分析如下: 这里总结一下关于利用php截取html字符串自动补全html标签,实际开发中会经常碰到,很多人直接先strip_tags过滤掉...
java 字符串截取类,兼容中英文及日韩文字格式
substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 substring截取字符串 ...
Java精确截取字符串
java编写一个截取字符串的函数,输入为一个字符串和字节数
一个php截取指定字符串之间的字符串的类,介绍一个php截取指定字符串之间的字符串的类,需要的朋友可以自行下载学习使用。
string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos); 其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子...
在实际工作中经常遇到截取两个相同字符串之间的字符的oracle问题,以下是相关语句
java字符串处理取出括号内的字符串 都是我自己试过可以用的j
各种java截取字符串方法及参数使用解释说明
截取html字符串中的所有文字,过滤掉html标签和脚本信息.
bat截取字符串
使用一个指定的分隔符把一个字符串分割存储到数组 使用您选择的分隔符将一个数组合并为一个字符串 返回字符串中匹配子串的第一个字符的下标