天天看点

Java精确截取字符串

  用java取得字符串的前面部分内容的函数contentstr = contenttemp.substring(0, 150);其中要保证最大长度不能超过字符串的长度。下面是我的实现部分代码,以及网上搜索的相关代码:

/* 

* content内容过长可能会导致xml文件过大,加载太慢。 

* 但从seo的角度考虑全部输出有利于搜索引擎,但一般情况下内容也不会太多 

* 为防止空格换行css无法控制撑大页面,用正则表达式替换掉空格,所以截取前面100个字符,页面显示的内容多少用css控制 

 *zdz的作品,流风的作品 

*/ 

//str.trim().replaceall("\\s+"," ");  

string contenttemp = rs.getstring(contentname).trim().replaceall("\\s+","");  

//npfdebug.print(contenttemp.length()); 

if(contenttemp.length()>100){//如果长度大于100则截取 

 contenttemp = contenttemp.substring(0, 100);  

 //npfdebug.print("contenttemp.length()>100 ? "+contenttemp.length()+"\n"+contentstr); 

}  

rsbody.append(beforcontent);  

rsbody.append(contenttemp);  

rsbody.append(endcontent);

  开发中经常遇到,字符串过长,无法完全显示的问题

  由于中文字符占两个字节,而英文字符占用一个字节,所以,单纯地判断字符数,效果往往不尽如人意

  下面的方法通过判断字符的类型来进行截取,效果还算可以:)

private string str;  

private int counterofdoublebyte;  

private byte b[];  

/** 

* 设置需要被限制长度的字符串 

* @param str 需要被限制长度的字符串 

public void setlimitlengthstring(string str){  

   this.str = str;  

* @param len 需要显示的长度(<font color="red">注意:长度是以byte为单位的,一个汉字是2个byte</font>) 

* @param symbol 用于表示省略的信息的字符,如“...”,“>>>”等。 

* @return 返回处理后的字符串 

public string getlimitlengthstring(int len, string symbol) throws unsupportedencodingexception {  

   counterofdoublebyte = 0;  

   b = str.getbytes("gbk");  

   if(b.length <= len)  

     return str;  

   for(int i = 0; i < len; i++){  

     if(b[i] < 0)  

       counterofdoublebyte++;  

   }  

   if(counterofdoublebyte % 2 == 0)  

     return new string(b, 0, len, "gbk") + symbol;  

   else 

     return new string(b, 0, len - 1, "gbk") + symbol;  

-------------------  

/** *//** 

    * 按字节长度截取字符串 

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

    * @param tocount 截取的字节长度 

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

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

    */ 

   public string substring(string str, int tocount, string more) ...{  

     int reint = 0;  

     string restr = "";  

     if (str == null)  

       return "";  

     char[] tempchar = str.tochararray();  

     for (int kk = 0; (kk < tempchar.length && tocount > reint); kk++) ...{  

       string s1 = str.valueof(tempchar[kk]);  

       byte[] b = s1.getbytes();  

       reint += b.length;  

       restr += tempchar[kk];  

     }  

     if (tocount == reint || (tocount == reint - 1))  

       restr += more;  

     return restr;  

=================  

     * 取字符串的前tocount个字符 

     * 

     * @param str 被处理字符串 

     * @param tocount 截取长度 

     * @param more 后缀字符串 

     * @version 2004.11.24 

     * @author zhulx 

     * @return string 

     */ 

    public static string substring(string str, int tocount,string more)  

    {  

      int reint = 0;  

      string restr = "";  

      if (str == null)  

        return "";  

      char[] tempchar = str.tochararray();  

      for (int kk = 0; (kk < tempchar.length && tocount > reint); kk++) {  

        string s1 = str.valueof(tempchar[kk]);  

        byte[] b = s1.getbytes();  

        reint += b.length;  

        restr += tempchar[kk];  

      }  

      if (tocount == reint || (tocount == reint - 1))  

        restr += more;  

      return restr;  

    }

  得到字符串真实长度和取固定长度的字符串函数

// 截取固定长度子字符串 ssource为字符串ilen为长度  

function getinterceptedstr(ssource, ilen)   

{   

    if(ssource.replace(/[^\x00-\xff]/g,"xx").length <= ilen)   

    {   

        return ssource;   

    }   

    var elided = "";   

    var str = "";   

    var l = 0;   

    var schar;   

    for(var i=0; schar=ssource.charat(i); i++)   

        str += schar;   

        l += (schar.match(/[^\x00-\xff]/) != null ? 2 : 1);   

        if(l >= ilen - elided.length)   

        {   

            break;   

        }   

    str += elided;   

    return str;   

}

本文出自seven的测试人生公众号最新内容请见作者的github页:http://qaseven.github.io/