一般是用在字符串中有html标签的截取.

如: 后台发布用了在线编辑器, 前台显示内容要截取的情况.

import Java.util.ArrayList;

import java.util.List;

import java.util.regex.Pattern;

import java.util.regex.Matcher;

/**

* @author http://hi.baidu.com/vnplalvyulin

* @version 1.0

*

* 按字节长度截取字符串(支持截取带HTML代码样式的字符串)

* @param param 将要截取的字符串参数

* @param length 截取的字节长度

* @param end 字符串末尾补上的字符串

* @return 返回截取后的字符串

*/

public class SubStringHTML

{

public String subStringHTML(String param,int length,String end) {

StringBuffer result = new StringBuffer();

int n = 0;

char temp;

boolean isCode = false; //是不是HTML代码

boolean isHTML = false; //是不是HTML特殊字符,如

for (int i = 0; i < param.length(); i++) {

temp = param.charAt(i);

if (temp == '

isCode = true;

}

else if (temp == '&') {

isHTML = true;

}

else if (temp == '>' && 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;

}

}

result.append(end);

//取出截取字符串中的HTML标记

String temp_result = result.toString().replaceAll("(>)[^<>]*()", "$1$2");

//去掉不需要结素标记的HTML标记

temp_result = temp_result.replaceAll("?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>",

"");

//去掉成对的HTML标记

temp_result=temp_result.replaceAll("]*>(.*?)\\1>","$2");

//用正则表达式取出标记

Pattern p = Pattern.compile("]*>");

Matcher m = p.matcher(temp_result);

List endHTML = new ArrayList();

while (m.find()) {

endHTML.add(m.group(1));

}

//补全不成对的HTML标记

for (int i = endHTML.size() - 1; i >= 0; i--) {

result.append("");

result.append(endHTML.get(i));

result.append(">");

}

return result.toString();

}

}

java html 字符串截取字符串长度_Java截取带html标签的字符串,再把标签补全(保证页面显示效果)...相关推荐

  1. 字符串分隔 -连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。...

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输 ...

  2. •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 1. 首先从第二条规定,可以看出,需要用到字符串的添加,我们考虑用S ...

  3. java 比较字符串前几位_java截取字符串前几位

    java截取字符串_IT/计算机_专业资料.java截取字符串 1根据字符串 S... java中常用的字符串的截取方法_计算机软件及应用_IT/计算机_专业资料.jsp中常见使用技术,js,jstl ...

  4. 字符串根据字节长度进行截取并展示选中效果——js字符串获取字节长度

    应用场景:分类部分有很多子类,点击"分类"时,有选中状态,选中效果如下: 由于内容分类名称可能会很长,就需要进行-展示, 模拟页面大致排版, 效果图如下: 可以看到上图中当分类名称 ...

  5. java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

  6. java取字符串后6位_java截取字符串后几位字符

    Java中的String类提供了一个substring(int from, int to)方法用于截取字符串中位置为from到to-1位置的字符. 因为字符串的字符位置是从0开始的,而substrin ...

  7. java截取字符串后几位_java截取字符串后几位字符的方法

    java截取字符串后几位字符的方法: java中截取字符串中最后几个字符可以使用String类的substring方法,具体用法参考下方说明: 1.substring(int beginIndex)s ...

  8. java 取字符串中的数字_java截取字符串中的数字

    随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法, ...

  9. java中怎么判断字符相等_Java中如何判断两个字符串相等

    如何判断两个字符串相等 Java 中可以有两种方法来做这个事,== 运算符 与 equals 方法.但是这两者又有什么区别? 先来看一段示例代码: String a1 = "abc" ...

最新文章

  1. DSP程序中段的定义和作用
  2. OpenCV imgcodecs写入的实例(附完整代码)
  3. Codeforces 1480B. The Great Hero(阅读模拟题,注意数据范围和攻击顺序)
  4. 广西2021高考成绩位次查询,2020年广西高考一分一段表及高考位次成绩排名查询(理科+文科)...
  5. 光端机使用时出现了故障怎样定位和处理
  6. 7-1-JavaBean基础
  7. Linux调试工具strace和gdb常用命令小结-转
  8. php数组array_filter,php数组array_filter()函数和array_slice()函数
  9. 牛客网刷题java之(斐波那契数列)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
  10. 基于Dav快速搭建React开发框架
  11. snipaste如何滚动截图_这三款软件,满足你对截图的所有需求
  12. Python 保留小数位
  13. 【Python】基于人脸识别的智能考勤系统(Pyqt5+MySQL+Opencv) [PC端部分-已附源码]
  14. 【MySQL】【入门】第二章:数据库及表的创建
  15. LinuxProbe学习第一天
  16. Symbian S60 5th 切换程序UI方向为横屏或竖屏
  17. httpclient请求webservice接口
  18. 虚拟机与本机连接网络设置
  19. ubuntu环境下制作win10启动盘,ubuntu安装图形化磁盘分区工具
  20. 京东登月平台基础架构技术解析

热门文章

  1. JNLP(jar包签名)
  2. python 获取文件大小,创建时间和访问时间
  3. 手动编写第一个javaWEB文件
  4. linux 查看发行版 名称 版本号
  5. linux c 遍历目录 及 目录下文件
  6. mysql text 最大长度 报错 Row size too large. The maximum row size for the used table type
  7. python 删除文件某一行
  8. linux grub2 等待时间修改
  9. linux nmon 系统性能监控 报表生成
  10. rtp 多媒体流同步控制 实时传输协议 简介