`
snowstone
  • 浏览: 19839 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java精确截取字符串

 
阅读更多

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

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

/*  
* content内容过长可能会导致xml文件过大,加载太慢。  
* 但从seo的角度考虑全部输出有利于搜索引擎,但一般情况下内容也不会太多  
* 为防止空格换行css无法控制撑大页面,用正则表达式替换掉空格,所以截取前面100个字符,页面显示的内容多少用css控制   
*/ 
//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;   
}

 参考网址:

http://developer.51cto.com/art/201112/308444.htm

http://www.cnblogs.com/myphoebe/archive/2011/12/20/2294171.html

分享到:
评论

相关推荐

    Java精确截取字符串.doc

    这个问题在文档标题“Java精确截取字符串.doc”中提到,描述也指出了解决字符串过长并需要添加省略号的需求。 以下是一种常见的解决方法,通过判断字符串中的每个字节来确定是否为中文字符,并据此进行截取: ```...

    Java精确截取字符串.pdf

    总的来说,Java中精确截取字符串涉及到字符编码、字节长度计算等多个方面。对于不同的场景,需要选择合适的方法,确保截取后的字符串既能满足长度要求,又能正确显示其中的文本内容。在实际开发中,可以根据项目需求...

    Java精确截取字符串[归类].pdf

    第二种方法是针对中文字符的精确截取,因为中文字符在Java中通常以两个字节表示。这种方法通过遍历字符串的字节数组并计数双字节字符(即中文字符)来实现: ```java private String str; private int ...

    impala中substr()截取中文字符串乱码的问题

    通过这种方式,我们能够克服Impala原生`substr()`函数在处理中文字符串时的局限性,实现更精确且无乱码的字符串截取操作。这种方法不仅适用于中文字符,还可以扩展到其他多字节字符集,如日文或韩文等。同时,这也是...

    字符串截取(按字节)

    本文将深入探讨一种按字节截取字符串的方法,并通过分析一个具体的Java代码示例来解释其实现原理。 #### 核心概念:Unicode与字节 在讨论字符串按字节截取之前,我们首先需要理解几个基础概念。现代计算机系统中,...

    字符串 截取

    根据给定文件的信息,本文将围绕“字符串截取”这一主题进行深入探讨,重点在于如何在Java环境下实现对包含中文字符的字符串进行精确截取,同时确保不会出现半个汉字的情况。 ### 字符串截取的基本概念 在计算机...

    java 分割字符串

    除了`split()`,Java还提供了`substring()`截取子串,`indexOf()`和`lastIndexOf()`查找子串位置,`startsWith()`和`endsWith()`检查字符串开头和结尾,以及`replace()`和`replaceAll()`替换子串等方法。 总之,...

    前后台实现精确截取指定长度字符串(考虑全角半角)

    根据提供的文件信息,本文将详细解释如何在前后端开发中实现对字符串进行精确截取,同时考虑到全角和半角字符的区别。这个问题在处理多语言环境下的文本时尤为重要,因为不同语言中的字符宽度可能有所不同,这直接...

    [待删除]字符串截取 - 中英文

    使用上述方法,可以更灵活地控制字符串的截取,特别是在需要精确控制显示长度的场景下,如新闻摘要、商品列表等。 此外,考虑到国际化的需求,开发者还应该了解并掌握如何在不同语言环境下正确处理字符串,包括但不...

    java字符串处理-中英文-非常有用的

    本文介绍了几种不同的Java字符串截取方法,并对其进行了详细的分析。通过这些方法,我们可以在不同操作系统下有效地处理中英文混合的字符串。需要注意的是,在实际应用中,还需要结合具体需求对这些方法进行适当的...

    java 各种时间的处理,格式化,字符串的各种处理方法,字符集的各种类型转换等!

    - `String`类提供了丰富的操作方法,如`concat()`用于连接字符串,`substring()`截取子串,`replace()`替换指定字符或子串,`trim()`去除两端空格,`toLowerCase()`和`toUpperCase()`转换大小写等。 - 正则表达式...

    字符串工具类

    - 当需要截取字符串的一部分时使用。 ##### 6. `substring(String str, int beginIndex, int endIndex)` **功能:** 获取指定起始和结束位置之间的子字符串。 **参数:** - `str` - 原始字符串。 - `beginIndex` - ...

    Android 带小数点的字符串格式化为固定位数

    1. **手动拼接法**:最基础的方法是通过字符串的截取、判断和拼接来实现。首先,获取小数点的位置,然后分别处理小数点前后的部分。如果不足指定位数,就在前面补0。这种方法简单但不够灵活。 2. **使用`String....

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式[文].pdf

    Java.util.Date与java.sql.Date的互转及字符串转换为日期时间格式 java.util.Date和java.sql.Date是Java中两个常用的日期时间类,分别属于不同的包。java.util.Date是Java标准库中的日期时间类,而java.sql.Date是...

    java1

    此外,这段代码还展示了如何使用Java的`substring()`方法来截取字符串的一部分。`substring(int beginIndex, int endIndex)`方法返回一个新的字符串,它是原始字符串从`beginIndex`(包含)到`endIndex`(不包含)的...

    Java脏字处理

    Java中的`String`类提供了丰富的API来处理字符串,如`indexOf()`用于查找子串,`replace()`用于替换特定字符或子串,以及`substring()`用于截取字符串的一部分。在处理脏字时,这些方法是基础工具,可以用来检测和...

    10. 数值运算,字符串处理,时间管理2.rar

    在J2ME(Java Micro Edition)开发中,数值运算、字符串处理和时间管理是至关重要的基础知识,对于构建高效且用户友好的移动应用来说必不可少。以下将详细解释这些关键概念。 一、数值运算 在J2ME中,数值运算涵盖...

    java常用函数API经常用的

    `String`类提供了丰富的API,如`length()`获取字符串长度,`charAt(int index)`访问指定位置的字符,`indexOf(String str)`查找子串首次出现的位置,以及`substring(int beginIndex, int endIndex)`截取子串等。...

    JAVA超详细教程

    - 使用substring()方法截取字符串的一部分。 - **5.10 替换** - 使用replace()方法替换字符串中的子字符串。 - **5.11 字符串转化为相应的数值** - 使用Integer.parseInt()、Double.parseDouble()等方法将字符...

    shp文件解析java实现

    在这个场景下,`meteoinfo`可能被用来进一步分析或整合`shp`文件中的地理信息与气象数据,但这需要具体项目的上下文才能给出更精确的解释。 在实际应用中,根据`meteoinfo`库的文档和API,我们可以将其与`geotools`...

Global site tag (gtag.js) - Google Analytics