Java精确截取字符串取得字符串前面指定长度字符函数
用java取得字符串的前面部分内容的函数contentStr = contenttempsubstring( )其中要保证最大长度不能超过字符串的长度下面是我的实现部分代码以及网上搜索的相关代码
/* * content内容过长可能会导致xml文件过大加载太慢
* 但从seo的角度考虑全部输出有利于搜索引擎但一般情况下内容也不会太多* 为防止空格换行css无法控制撑大页面用正则表达式替换掉空格所以截取前面个字符页面显示的内容多少用css控制*zdz的作品流风的作品*/ //strtrim()replaceAll(\\s+ )String contenttemp = rsgetString(contentName)trim()replaceAll(\\s+)//NpfDebugprint(contenttemplength())if(contenttemplength()>){//如果长度大于则截取contenttemp = contenttempsubstring( )//NpfDebugprint(contenttemplength()> ? +contenttemplength()+\n+contentStr)} rsbodyappend(beforCONTENT)rsbodyappend(contenttemp)rsbodyappend(endCONTENT)开发中经常遇到字符串过长无法完全显示的问题
这时候就需要截取我们所需要的长度后面显示省略号或其他字符
由于中文字符占两个字节而英文字符占用一个字节所以单纯地判断字符数效果往往不尽如人意
下面的方法通过判断字符的类型来进行截取效果还算可以)
如果大家有其他的解决方法欢迎贴出来共同学习)
private String strprivate int counterOfDoubleByteprivate byte b[]/** * 设置需要被限制长度的字符串* @param str 需要被限制长度的字符串*/ public void setLimitLengthString(String str){ thisstr = str} /** * @param len 需要显示的长度(<font color=red>注意长度是以byte为单位的一个汉字是个byte</font>)
* @param symbol 用于表示省略的信息的字符如……>>>等
* @return 返回处理后的字符串*/ public String getLimitLengthString(int len String symbol) throws UnsupportedEncodingException { counterOfDoubleByte = b = strgetBytes(GBK)if(blength <= len)
return strfor(int i = i < len i++){ if(b[i] < )
counterOfDoubleByte++} if(counterOfDoubleByte % == )
return new String(b len GBK) + symbolelse return new String(b len GBK) + symbol}
——————————————————-
/** *//** * 按字节长度截取字符串* @param str 将要截取的字符串参数* @param toCount 截取的字节长度* @param more 字符串末尾补上的字符串* @return 返回截取后的字符串*/ public String substring(String str int toCount String more) ……{ int reInt = String reStr = if (str == null)
return char[] tempChar = strtoCharArray()for (int kk = (kk < tempCharlength && toCount > reInt) kk++) ……{ String s = strvalueOf(tempChar[kk])byte[] b = sgetBytes()reInt += blengthreStr += tempChar[kk]} if (toCount == reInt || (toCount == reInt ))
reStr += morereturn reStr}
=================
/** * 取字符串的前toCount个字符* * @param str 被处理字符串* @param toCount 截取长度* @param more 后缀字符串* @version * @author zhulx * @return String */ public static String substring(String str int toCountString more)
{ int reInt = String reStr = if (str == null)
return char[] tempChar = strtoCharArray()for (int kk = (kk < tempCharlength && toCount > reInt) kk++) { String s = strvalueOf(tempChar[kk])byte[] b = sgetBytes()reInt += blengthreStr += tempChar[kk]} if (toCount == reInt || (toCount == reInt ))
reStr += morereturn reStr}得到字符串真实长度和取固定长度的字符串函数
// 截取固定长度子字符串 sSource为字符串iLen为长度function getInterceptedStr(sSource iLen)
{ if(sSourcereplace(/[^\x\xff]/gxx)length <= iLen)
{ return sSource} var ELIDED =
var str = var l = var scharfor(var i= schar=sSourcecharAt(i) i++)
{ str += scharl += (scharmatch(/[^\x\xff]/) != null ? )if(l >= iLen ELIDEDlength)
{ break} str += ELIDED
return str}