Java精确截取字符串

开发 后端
本文主要介绍了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(0100);  
  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 需要显示的长度(<font color="red">注意:长度是以byte为单位的,一个汉字是2个byte</font>)  
  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;   

原文链接:http://www.cnblogs.com/myphoebe/archive/2011/12/20/2294171.html

【编辑推荐】

  1. Java开源CMS系统 JEECMS v2012版发布
  2. Java生成树结构各点之间最短路径算法
  3. Java 远程文件对接
  4. Java I/O系统基础知识
  5. Ubuntu对Java开发包说再见!
责任编辑:林师授 来源: myphoebe的博客
相关推荐

2009-06-30 14:16:37

截取字符串

2022-07-18 08:18:11

字符JavaJDK

2010-11-26 11:34:32

MySQL截取字符串函

2009-09-01 17:58:55

C#截取字符串

2009-09-01 17:41:53

C#截取字符串函数

2009-09-01 17:50:23

C#截取字符串

2021-03-08 08:23:24

Java字符串截取

2022-03-16 22:21:53

substringsubstrslice

2010-09-13 15:06:40

sql server字

2010-04-27 12:26:21

Unix字符串

2023-10-08 08:37:28

SQL字符串数据

2009-11-18 18:02:19

PHP字符串截取

2021-01-09 23:11:33

SQL数据库字母

2010-07-13 09:20:38

SQL Server

2009-06-23 14:13:00

Java字符串

2009-11-25 13:31:34

PHP常用语法

2009-11-26 16:43:11

PHP截取中文字符串

2024-04-01 08:41:39

字符串.NET

2021-04-20 10:32:26

Java字符串代码

2011-06-08 15:45:41

字符串JAVA
点赞
收藏

51CTO技术栈公众号