vickzhu

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            151 隨筆 :: 0 文章 :: 34 評(píng)論 :: 0 Trackbacks
          在頁(yè)面中顯示某字段時(shí),字段值過長(zhǎng)會(huì)導(dǎo)致頁(yè)面樣式錯(cuò)亂,這時(shí)候我們需要對(duì)值進(jìn)行截取,當(dāng)截取值時(shí)會(huì)碰到以下問題:
          1、如果按字符截取會(huì)導(dǎo)致中英文顯示的長(zhǎng)度不一
          2、如果按字節(jié)截取可能會(huì)導(dǎo)致最后一個(gè)中文截成兩部分
          以下代碼是在網(wǎng)上獲取并經(jīng)過改造而成,能夠很好的解決上面兩個(gè)問題
              /**
               * 根據(jù)指定字節(jié)數(shù)截取字符串,當(dāng)指定處為中文第一個(gè)字節(jié)時(shí)少截取一個(gè)字符,當(dāng)長(zhǎng)度大于指定截取長(zhǎng)度時(shí),截取后在字符串末尾追加指定字符串<br/>
               * 這里添加了字符串的編碼,因?yàn)轫?yè)面的編碼不同,字符串所占字節(jié)也不同
               *
               * @param str 待截取字符串,如果為null或者"",則立即返回str
               * @param length 需要截取的長(zhǎng)度
               * @param endStr 截取后末尾追加的字符串
               * @param charset 待截取字符串的編碼
               * @return
               */
              public String subStringByByte(String str, int length, String endStr, String charset) {
                  if (str == null || "".equals(str.trim()) || length <= 0) {
                      return str;
                  }
                  try {
                      int strlen = str.getBytes(charset).length;// 這里要和頁(yè)面的編碼相關(guān)
                      if (strlen < length) return str;
                      Pattern p = Pattern.compile("^[""u4e00-""u9fa5]$");
                      int i = 0, j = 0;
                      int sublength = length - ((endStr == null) ? 0 : endStr.getBytes(charset).length);
                      for (char c : str.toCharArray()) {
                          Matcher m = p.matcher(String.valueOf(c));
                          i += m.find() ? 2 : 1;
                          ++j;
                          if (i == sublength) break;
                          if (i > sublength) {
                              --j;
                              break;
                          }
                      }
                      return str.substring(0, j) + endStr;
                  } catch (UnsupportedEncodingException e) {
                      return str;
                  }
              }
          posted on 2010-12-14 10:49 筱 筱 閱讀(353) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 合川市| 铜梁县| 尼勒克县| 林州市| 德阳市| 台州市| 泸州市| 新营市| 丽水市| 桑日县| 平遥县| 白沙| 陵川县| 通化县| 尚义县| 中宁县| 洛浦县| 得荣县| 武城县| 宁津县| 澄城县| 巴青县| 龙海市| 连南| 北海市| 盱眙县| 雷山县| 婺源县| 体育| 万源市| 苏尼特右旗| 麻阳| 扎鲁特旗| 江达县| 长阳| 陵水| 绥滨县| 瑞金市| 进贤县| 高邮市| 日照市|