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(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;
- }