Java精确截取字符串

Java精确截取字符串,取得字符串前面指定长度字符函数

创新互联公司凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、网站制作、网站设计、网站优化、软件开发、网站改版等服务,在成都十余年的网站建设设计经验,为成都上千中小型企业策划设计了网站。

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

 
 
 
  1. /*  
  2. * content内容过长可能会导致xml文件过大,加载太慢。  
  3. * 但从seo的角度考虑全部输出有利于搜索引擎,但一般情况下内容也不会太多  
  4. * 为防止空格换行css无法控制撑大页面,用正则表达式替换掉空格,所以截取前面100个字符,页面显示的内容多少用css控制  
  5.  
  6.  *zdz的作品,流风的作品  
  7. */ 
  8. //str.trim().replaceAll("\\s+"," ");   
  9. String contenttemp = rs.getString(contentName).trim().replaceAll("\\s+","");  
  10. //NpfDebug.print(contenttemp.length());  
  11. if(contenttemp.length()>100){//如果长度大于100则截取  
  12.  contenttemp = contenttemp.substring(0, 100);  
  13.  //NpfDebug.print("contenttemp.length()>100 ? "+contenttemp.length()+"\n"+contentStr);  
  14. }  
  15. rsbody.append(beforCONTENT);  
  16. rsbody.append(contenttemp);  
  17. rsbody.append(endCONTENT);  

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

这时候就需要截取我们所需要的长度,后面显示省略号或其他字符。

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

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

如果大家有其他的解决方法欢迎贴出来,共同学习:)

 
 
 
  1. private String str;  
  2. private int counterOfDoubleByte;  
  3. private byte b[];  
  4. /**  
  5. * 设置需要被限制长度的字符串  
  6. * @param str 需要被限制长度的字符串  
  7. */ 
  8. public void setLimitLengthString(String str){  
  9.    this.str = str;  
  10. }  
  11. /**  
  12. * @param len 需要显示的长度(注意:长度是以byte为单位的,一个汉字是2个byte)  
  13. * @param symbol 用于表示省略的信息的字符,如“...”,“>>>”等。  
  14. * @return 返回处理后的字符串  
  15. */ 
  16. public String getLimitLengthString(int len, String symbol) throws UnsupportedEncodingException {  
  17.    counterOfDoubleByte = 0;  
  18.    b = str.getBytes("GBK");  
  19.    if(b.length <= len)  
  20.      return str;  
  21.    for(int i = 0; i < len; i++){  
  22.      if(b[i] < 0)  
  23.        counterOfDoubleByte++;  
  24.    }  
  25.  
  26.    if(counterOfDoubleByte % 2 == 0)  
  27.      return new String(b, 0, len, "GBK") + symbol;  
  28.    else 
  29.      return new String(b, 0, len - 1, "GBK") + symbol;  
  30. }  
  31.    
  32.    
  33.    
  34. -------------------  
  35.    
  36. /** *//**  
  37.     * 按字节长度截取字符串  
  38.     * @param str 将要截取的字符串参数  
  39.     * @param toCount 截取的字节长度  
  40.     * @param more 字符串末尾补上的字符串  
  41.     * @return 返回截取后的字符串  
  42.     */ 
  43.    public String substring(String str, int toCount, String more) ...{  
  44.      int reInt = 0;  
  45.      String reStr = "";  
  46.      if (str == null)  
  47.        return "";  
  48.      char[] tempChar = str.toCharArray();  
  49.      for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) ...{  
  50.        String s1 = str.valueOf(tempChar[kk]);  
  51.        byte[] b = s1.getBytes();  
  52.        reInt += b.length;  
  53.        reStr += tempChar[kk];  
  54.      }  
  55.      if (toCount == reInt || (toCount == reInt - 1))  
  56.        reStr += more;  
  57.      return reStr;  
  58.    }  
  59.    
  60. =================  
  61.    
  62. /**  
  63.      * 取字符串的前toCount个字符  
  64.      *  
  65.      * @param str 被处理字符串  
  66.      * @param toCount 截取长度  
  67.      * @param more 后缀字符串  
  68.      * @version 2004.11.24  
  69.      * @author zhulx  
  70.      * @return String  
  71.      */ 
  72.     public static String substring(String str, int toCount,String more)  
  73.     {  
  74.       int reInt = 0;  
  75.       String reStr = "";  
  76.       if (str == null)  
  77.         return "";  
  78.       char[] tempChar = str.toCharArray();  
  79.       for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {  
  80.         String s1 = str.valueOf(tempChar[kk]);  
  81.         byte[] b = s1.getBytes();  
  82.         reInt += b.length;  
  83.         reStr += tempChar[kk];  
  84.       }  
  85.       if (toCount == reInt || (toCount == reInt - 1))  
  86.         reStr += more;  
  87.       return reStr;  
  88.     } 

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

 
 
 
  1. // 截取固定长度子字符串 sSource为字符串iLen为长度   
  2. function getInterceptedStr(sSource, iLen)   
  3. {   
  4.     if(sSource.replace(/[^\x00-\xff]/g,"xx").length <= iLen)   
  5.     {   
  6.         return sSource;   
  7.     }   
  8.     var ELIDED = "";   
  9.        
  10.     var str = "";   
  11.     var l = 0;   
  12.     var schar;   
  13.     for(var i=0; schar=sSource.charAt(i); i++)   
  14.     {   
  15.         str += schar;   
  16.         l += (schar.match(/[^\x00-\xff]/) != null ? 2 : 1);   
  17.         if(l >= iLen - ELIDED.length)   
  18.         {   
  19.             break;   
  20.         }   
  21.     }   
  22.     str += ELIDED;   
  23.        
  24.     return str;   

网站名称:Java精确截取字符串
本文网址:http://www.shufengxianlan.com/qtweb/news36/168936.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联