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)航:
           
          主站蜘蛛池模板: 海口市| 大渡口区| 呼伦贝尔市| 桃园县| 华阴市| 都匀市| 丹东市| 沈丘县| 织金县| 翁牛特旗| 韶关市| 万盛区| 锦屏县| 横峰县| 雅安市| 青川县| 中方县| 利津县| 东宁县| 天津市| 合水县| 松溪县| 阜宁县| 宜兰市| 来宾市| 仪征市| 芦山县| 务川| 即墨市| 上思县| 定兴县| 辉南县| 南安市| 云浮市| 昭平县| 监利县| 海南省| 桂阳县| 南阳市| 土默特左旗| 望江县|