今天就跟大家聊聊有關(guān)Java中怎么精確截取字符串,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比淮陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式淮陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋淮陽地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
Java精確截取字符串,取得字符串前面指定長度字符函數(shù)
用java取得字符串的前面部分內(nèi)容的函數(shù)contentStr = contenttemp.substring(0, 150);其中要保證***長度不能超過字符串的長度。下面是我的實現(xiàn)部分代碼,以及網(wǎng)上搜索的相關(guān)代碼:
/* * content內(nèi)容過長可能會導(dǎo)致xml文件過大,加載太慢。 * 但從seo的角度考慮全部輸出有利于搜索引擎,但一般情況下內(nèi)容也不會太多 * 為防止空格換行css無法控制撐大頁面,用正則表達(dá)式替換掉空格,所以截取前面100個字符,頁面顯示的內(nèi)容多少用css控制 *zdz的作品,流風(fēng)的作品 */ //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);
開發(fā)中經(jīng)常遇到,字符串過長,無法完全顯示的問題
這時候就需要截取我們所需要的長度,后面顯示省略號或其他字符。
由于中文字符占兩個字節(jié),而英文字符占用一個字節(jié),所以,單純地判斷字符數(shù),效果往往不盡如人意
下面的方法通過判斷字符的類型來進(jìn)行截取,效果還算可以:)
如果大家有其他的解決方法歡迎貼出來,共同學(xué)習(xí):)
private String str; private int counterOfDoubleByte; private byte b[]; /** * 設(shè)置需要被限制長度的字符串 * @param str 需要被限制長度的字符串 */ public void setLimitLengthString(String str){ this.str = str; } /** * @param len 需要顯示的長度(注意:長度是以byte為單位的,一個漢字是2個byte) * @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; } ------------------- /** *//** * 按字節(jié)長度截取字符串 * @param str 將要截取的字符串參數(shù) * @param toCount 截取的字節(jié)長度 * @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; }
得到字符串真實長度和取固定長度的字符串函數(shù)
// 截取固定長度子字符串 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; }
看完上述內(nèi)容,你們對Java中怎么精確截取字符串有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。