vickzhu

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            151 隨筆 :: 0 文章 :: 34 評(píng)論 :: 0 Trackbacks
          <2010年12月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(6)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          在頁面中顯示某字段時(shí),字段值過長會(huì)導(dǎo)致頁面樣式錯(cuò)亂,這時(shí)候我們需要對值進(jìn)行截取,當(dāng)截取值時(shí)會(huì)碰到以下問題:
          1、如果按字符截取會(huì)導(dǎo)致中英文顯示的長度不一
          2、如果按字節(jié)截取可能會(huì)導(dǎo)致最后一個(gè)中文截成兩部分
          以下代碼是在網(wǎng)上獲取并經(jīng)過改造而成,能夠很好的解決上面兩個(gè)問題
              /**
               * 根據(jù)指定字節(jié)數(shù)截取字符串,當(dāng)指定處為中文第一個(gè)字節(jié)時(shí)少截取一個(gè)字符,當(dāng)長度大于指定截取長度時(shí),截取后在字符串末尾追加指定字符串<br/>
               * 這里添加了字符串的編碼,因?yàn)轫撁娴木幋a不同,字符串所占字節(jié)也不同
               *
               * @param str 待截取字符串,如果為null或者"",則立即返回str
               * @param length 需要截取的長度
               * @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;// 這里要和頁面的編碼相關(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)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 河西区| 宁津县| 大姚县| 云梦县| 平泉县| 北票市| 郁南县| 澜沧| 安国市| 寻乌县| 仙桃市| 喜德县| 徐闻县| 岳阳县| 南靖县| 廊坊市| 新和县| 揭阳市| 高淳县| 墨脱县| 登封市| 莆田市| 景谷| 开平市| 徐水县| 洪雅县| 平阴县| 怀来县| 惠水县| 大兴区| 浮梁县| 鄯善县| 黄骅市| 闸北区| 聊城市| 临颍县| 苍山县| 南陵县| 兰溪市| 侯马市| 曲沃县|