程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java精確截取字符串

Java精確截取字符串

編輯:關於JAVA

Java精確截取字符串,取得字符串前面指定長度字符函數

用Java取得字符串的前面部分內容的函數contentStr = contenttemp.substring(0, 150);其中要保證最大長度不能超過字符串的長度。下面是我的實現部分代碼,以及網上搜索的相關代碼:

  1. /*
  2. * content內容過長可能會導致XML文件過大,加載太慢。
  3. * 但從SEO的角度考慮全部輸出有利於搜索引擎,但一般情況下內容也不會太多
  4. * 為防止空格換行css無法控制撐大頁面,用正則表達式替換掉空格,所以截取前面100個字符,頁面顯示的內容多少用CSS控制
  5. *zdz的作品,流風的作品
  6. */
  7. //str.trim().replaceAll("\\s+"," ");
  8. String contenttemp = rs.getString(contentName).trim().replaceAll("\\s+","");
  9. //NpfDebug.print(contenttemp.length());
  10. if(contenttemp.length()>100){//如果長度大於100則截取
  11. contenttemp = contenttemp.substring(0, 100);
  12. //NpfDebug.print("contenttemp.length()>100 ? "+contenttemp.length()+"\n"+contentStr);
  13. }
  14. rsbody.append(beforCONTENT);
  15. rsbody.append(contenttemp);
  16. rsbody.append(endCONTENT);

開發中經常遇到,字符串過長,無法完全顯示的問題

這時候就需要截取我們所需要的長度,後面顯示省略號或其他字符。

由於中文字符占兩個字節,而英文字符占用一個字節,所以,單純地判斷字符數,效果往往不盡如人意

下面的方法通過判斷字符的類型來進行截取,效果還算可以:)

如果大家有其他的解決方法歡迎貼出來,共同學習:)

  1. private String str;
  2. private int counterOfDoubleByte;
  3. private byte b[];
  4. /**
  5. * 設置需要被限制長度的字符串
  6. * @param str 需要被限制長度的字符串
  7. */
  8. public void setLimitLengthString(String str){
  9. this.str = str;
  10. }
  11. /**
  12. * @param len 需要顯示的長度(<font color="red">注意:長度是以byte為單位的,一個漢字是2個byte</font>)
  13. * @param symbol 用於表示省略的信息的字符,如“...”,“>>>”等。
  14. * @return 返回處理後的字符串
  15. */
  16. public String getLimitLengthString(int len, String symbol) throws UnsupportedEncodingException {
  17. counterOfDoubleByte = 0;
  18. b = str.getBytes("GBK");
  19. if(b.length <= len)
  20. return str;
  21. for(int i = 0; i < len; i++){
  22. if(b[i] < 0)
  23. counterOfDoubleByte++;
  24. }
  25. if(counterOfDoubleByte % 2 == 0)
  26. return new String(b, 0, len, "GBK") + symbol;
  27. else
  28. return new String(b, 0, len - 1, "GBK") + symbol;
  29. }
  30. -------------------
  31. /** *//**
  32. * 按字節長度截取字符串
  33. * @param str 將要截取的字符串參數
  34. * @param toCount 截取的字節長度
  35. * @param more 字符串末尾補上的字符串
  36. * @return 返回截取後的字符串
  37. */
  38. public String substring(String str, int toCount, String more) ...{
  39. int reInt = 0;
  40. String reStr = "";
  41. if (str == null)
  42. return "";
  43. char[] tempChar = str.toCharArray();
  44. for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) ...{
  45. String s1 = str.valueOf(tempChar[kk]);
  46. byte[] b = s1.getBytes();
  47. reInt += b.length;
  48. reStr += tempChar[kk];
  49. }
  50. if (toCount == reInt || (toCount == reInt - 1))
  51. reStr += more;
  52. return reStr;
  53. }
  54. =================
  55. /**
  56. * 取字符串的前toCount個字符
  57. *
  58. * @param str 被處理字符串
  59. * @param toCount 截取長度
  60. * @param more 後綴字符串
  61. * @version 2004.11.24
  62. * @author zhulx
  63. * @return String
  64. */
  65. public static String substring(String str, int toCount,String more)
  66. {
  67. int reInt = 0;
  68. String reStr = "";
  69. if (str == null)
  70. return "";
  71. char[] tempChar = str.toCharArray();
  72. for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
  73. String s1 = str.valueOf(tempChar[kk]);
  74. byte[] b = s1.getBytes();
  75. reInt += b.length;
  76. reStr += tempChar[kk];
  77. }
  78. if (toCount == reInt || (toCount == reInt - 1))
  79. reStr += more;
  80. return reStr;
  81. }

得到字符串真實長度和取固定長度的字符串函數

  1. // 截取固定長度子字符串 sSource為字符串iLen為長度
  2. function getInterceptedStr(sSource, iLen)
  3. {
  4. if(sSource.replace(/[^\x00-\xff]/g,"xx").length <= iLen)
  5. {
  6. return sSource;
  7. }
  8. var ELIDED = "";
  9. var str = "";
  10. var l = 0;
  11. var schar;
  12. for(var i=0; schar=sSource.charAt(i); i++)
  13. {
  14. str += schar;
  15. l += (schar.match(/[^\x00-\xff]/) != null ? 2 : 1);
  16. if(l >= iLen - ELIDED.length)
  17. {
  18. break;
  19. }
  20. }
  21. str += ELIDED;
  22. return str;
  23. }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved