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}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25900.html