Java精确截取字符串

简介:

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(0100);    //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/




目录
相关文章
|
5天前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
45 17
|
5天前
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
36 13
|
4月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
182 83
|
7月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
98 1
|
4月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
131 60
|
4月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
91 26
|
4月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
143 8
|
4月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
87 6
|
5月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
128 15