`
daichangfu
  • 浏览: 262789 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JSP中截取在线编辑器的字符串的处理

    博客分类:
  • jsp
阅读更多
原文地址:http://www.cn-java.com/www1/?uid-572544-action-viewspace-itemid-54784

截取字符串的同时保留原有的标记并补全

package yidwo.com;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * 按字节长度截取字符串(支持截取带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("<([a-zA-Z]+)[^<>]*>(.*?)</\\1>","$2");
	    //用正则表达式取出标记
	    Pattern p = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
	    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();
	  }

}



截取纯文本字符串

public String subStringHTML(String param,int length,String end){ 
       if(param.length()<length){
        return param;
       }else{
     StringBuffer result = new StringBuffer(); 
        int n = 0; 
        char temp; 
        boolean isCode = false;
        boolean isHTML = false; 
        String strResult = "";
        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 && temp!='>'){ 
                n = n+1; 
                if((temp+" ").getBytes().length>1){ 
                    n = n+1; 
                } 
                result.append(temp); 
            } 
            if(n>=length){ 
             break; 
            } 
        } 
        if(isHTML){
            String str[]=result.toString().split("&");
            for(int j=0;j<str.length-1;j++){
             strResult += (j==0?"":"&")+str[j];
            }
           }else{
            strResult = result.toString();
           }
        strResult += end;
        return strResult; 
       }
   }




作者:我不大会用正则,方法也可能笨了一点,不过达到了我想要的结果,再多测试几次,希望代码能经受得住考验!
分享到:
评论

相关推荐

    JSP中截取在线编辑器的字符串的处理.

    总结来说,处理JSP中在线编辑器的字符串截取,需要考虑到HTML的结构和标签的完整性。通过正则表达式、DOM解析或者利用Jsoup等库,可以有效地解决这个问题。在实际应用中,应根据项目需求和资源限制选择合适的方法。

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    从中截取字符串.asp 从中截取字符串 切分字符串.asp 切分字符串 删除字符串前后导空格.asp 删除字符串前导空格.asp 删除字符串后导空格.asp 反向截取字符串.asp ...

    ajax iframe jsp 无刷新上传文件.zip

    4. **JavaScript字符串函数**:在前端处理中,JavaScript的字符串函数非常关键,例如trim()去除空白,substring()截取子串,replace()替换字符,split()分割字符串等。这些函数在处理上传文件名、路径或者错误信息时...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    109.使用特定字符串对一个字符串进行分割? 110.格式化输出数字和字符? 111.生成一定范围的随机数? 112.调用其它应用程序? 113.禁止列出站点文件目录? 114.防止用户直接输入文件名访问JSP? 115.防止表单重复提交? 116...

    jsp编程技巧集锦

    数字转中文 128 自动计算金额 129 JSP页面打印中使用WebBrowser控件 130 不刷新页面添加新的类别 131 鼠标滚动缩放图片 132 根据输入的表名生成输入数据表格 133 JSP表格输出到Excel 134.JSP...

    JSTL函数JSTL函数

    这个函数在提取字符串中某个部分时很有用。 13. `fn:substringBefore(string, delimiter)` 返回`string`从开始到`delimiter`字符之前的部分。这在需要获取字符串前面的特定部分时非常有用。 14. `fn:toLowerCase...

    2021-2022计算机二级等级考试试题及答案No.17093.docx

    15. 字符串截取:Java中的substring方法,b=a.substring(1,3)会截取从索引1到3(不包括3)的子串,结果为"el"。 16. 输入输出:C语言中的gets函数读取用户输入,strcat函数拼接字符串,输入ABC后,输出结果为"ABC...

    struts包 SqlServer JDBC链接包

    在开发过程中,我们经常使用String类的各种方法,如concat、substring、trim等,来进行字符串的拼接、截取和清理等操作。 "Sqlserver"标签明确了这个包与SQL Server数据库的关联,意味着这个压缩包可能包含了与SQL ...

    JavaWeb应用实验报告.doc

    1. 使用文本编辑器(如记事本)编写JSP源文件,保存为`.jsp`格式,放在Tomcat服务器的`webapps/ROOT`目录下。 2. 启动Tomcat服务器。 3. 在浏览器中输入相应的URL地址查看运行结果。 4. 截取实验结果的屏幕图像以供...

    JAVA超详细教程

    - 使用indexOf()、lastIndexOf()等方法检索字符串中的子字符串。 - **5.9 字符串的截取** - 使用substring()方法截取字符串的一部分。 - **5.10 替换** - 使用replace()方法替换字符串中的子字符串。 - **5.11...

    2021-2022计算机二级等级考试试题及答案No.905.docx

    17. **VB6.0 截取字符串**:在Visual Basic 6.0中,使用LEFT函数可以从字符串左侧截取指定长度的子字符串,所以截取"Visual"的表达式是LEFT("Visual Basic 6.0",6)。 18. **静态网页扩展名**:静态网页文件的常见...

    ASP程序设计复习题.pdf

    - 示例代码`&lt;% a="1"+"1" b="1"&"1" c="1"&1 %&gt;`中的字符串拼接操作会导致变量类型错误,因此不会有预期的结果。 5. **数值转字符串函数**: - 使用`Cstr`函数可以将数值转换为字符串。 6. **字符串截取**: - ...

    2021-2022计算机二级等级考试试题及答案No.16383.docx

    6. VisualBasic6.0截取字符串:在VB6中,使用`LEFT`函数可以截取字符串的前几个字符。例如,`LEFT("Visual Basic 6.0", 6)`将返回"Visual"。 7. 计算机基本存储单位:计算机存储和处理数据的基本单位是字节(Byte)...

    易宝支付测试

    1. **字符串 API**:在计算机编程中,字符串是一系列字符的序列,而字符串 API 是指用于处理字符串的各种方法和函数集合。常见的字符串操作包括拼接、分割、查找等。 2. **比较运算符**:比较运算符是用来比较两个...

    2021-2022计算机二级等级考试试题及答案No.4670.docx

    14. `eval('500/10')`的结果是50.0,因为eval会计算字符串中的表达式。 15. 同步代码块的锁对象可以是任意类型,只要它实现了锁机制。 16. 定义接口需要使用`interface`关键字。 17. ASCII码值升序排序后,5...

    java初学者必看

    2.6.4 Eclipse的编辑器 2.6.5 Eclipse的工具栏和菜单栏 2.6.6 使用Eclipse编写HelloWorld程序 2.7 本章习题 第3章 Java语言基础 3.1 标识符 3.1.1 标识符的概念 3.1.2 变量命名规则 3.1.3 变量命名技巧 3.2...

    2021-2022计算机二级等级考试试题及答案No.4484.docx

    21. 字符串截取:`substring(1,3)`从字符串a的第二个字符开始截取,到第三个字符结束,结果为"el"。 22. 广域网缩写:广域网的英文缩写是WAN,LAN是局域网的缩写。 23. C语言输入:在给定的C语言程序中,正确输入1...

Global site tag (gtag.js) - Google Analytics