<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    snowolf

    這樣的一種生活
    posts - 23, comments - 5, trackbacks - 0, articles - 11

    精確截取字符串(轉載)

    Posted on 2006-06-13 10:46 snowolf 閱讀(866) 評論(0)  編輯  收藏 所屬分類: 學習
    開發中經常遇到,字符串過長,無法完全顯示的問題

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

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

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


    如果大家有其他的解決方法歡迎貼出來,共同學習:)
    **********************************************************************
    private String str;
    private int counterOfDoubleByte;
    private byte b[];
    /**
    * 設置需要被限制長度的字符串
    * @param str 需要被限制長度的字符串
    */
    public void setLimitLengthString(String str){
    ? this.str = str;
    }
    /**
    * @param len 需要顯示的長度(<font color="red">注意:長度是以byte為單位的,一個漢字是2個byte</font>)
    * @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;
    }


    本文轉貼自網友:focus2004 的文章

    #?re: 精確截取字符串(轉載) 2006-01-28 18:24 tdg
    大作拜讀,有一點愚見,特拋磚引玉:
    1。字符串除了可以基于byte[]操作外,還可以基于char[]操作。看老大你的意圖是想截取字符串的前幾個字符然后加上省略符號最后輸出而已,完全不必考慮用byte[]數組操作啊 。而且好像開發中更注重語義上的第幾個字符而不是你說的這種情況哦。
    2。以下是拙作,請斧正:
    /**
    * 字符串截取函數
    * @param str String 要處理的字符串
    * @param length int 需要顯示的長度
    * @param symbol String 用于表示省略的信息的字符,如“...”,“>>>”等
    * @return String 返回處理后的字符串
    * @throws UnsupportedEncodingException
    */
    public String getLimitLengthString(String str, int length, String symbol) throws
    UnsupportedEncodingException {
    assert str != null;
    assert length > 0;
    assert symbol != null;
    //如果字符串的位數小于等于要截取的位數,附加上表示省略的信息的字符串后返回
    if (str.length() <= length) {
    return str + symbol;
    //從零開始,截取length個字符,附加上表示省略的信息的字符串后返回
    } else {
    str = new String(str.getBytes("GBK"));
    char[] charArray = str.toCharArray();
    char[] charArrayDesc = new char[length];
    System.arraycopy(charArray, 0, charArrayDesc, 0, length);
    return new String(charArrayDesc) + symbol;
    }
    }??

    呵呵 tdg 兄很認真喔,談不上斧正。主要是這個問題,用 char 處理,如果是字母或者數字,實際上截取出來的會比漢字少占用一半的空間,所以截取出來后,還是不能對齊。而實際上 char 數組中,不管是字母、數字還是漢字,它們都只代表一個單元。但是 byte 則不同,字母、數字只占用一個字節,而漢字占用兩個字節(都是GBK編碼)。??

    您好!
    你的文章讓我受益不少,有個問題想向您確認一下:
    在代碼中
    b = str.getBytes("GBK");
    if(b.length <= len)
    return str;
    for(int i = 0; i < len; i++){
    if(b[i] < 0)
    counterOfDoubleByte++;
    }
    是不是如果只要是中文漢字,在b[i]對應的值都是小于0的,
    也就是說,在漢字代表的兩個字節中,這兩個漢字分別轉化為整數值時,是不是一定小于0,但值范圍不能小于-127的。做過測試,不能肯定。:)

    istarliu,這里要強調一下,GBK、GB2312 雙字節編碼字節才是負的。UTF-8 三字節編碼未去核實。

    來源
    主站蜘蛛池模板: 国产成年无码久久久免费| 日韩欧美亚洲中文乱码| 久久美女网站免费| 国产亚洲精品va在线| 国产高清对白在线观看免费91| 日本人的色道www免费一区| 亚洲av永久无码一区二区三区| 成人五级毛片免费播放| 亚洲人成人网站18禁| 四虎永久免费地址在线观看| 日本亚洲高清乱码中文在线观看 | 亚洲aⅴ天堂av天堂无码麻豆| 97无码免费人妻超级碰碰夜夜 | 亚洲AV无码成H人在线观看| 一级视频在线免费观看| 亚洲日本va中文字幕久久| 久久久免费的精品| 亚洲免费在线观看视频| 日韩人妻无码免费视频一区二区三区| 久久久久久亚洲av无码蜜芽| 亚洲美女在线国产| 精品无码无人网站免费视频| 亚洲一区二区三区国产精华液| 国产免费人人看大香伊| 成在人线av无码免费高潮喷水| 亚洲高清视频免费| 一区二区亚洲精品精华液| 成在线人永久免费视频播放| 精品乱子伦一区二区三区高清免费播放| 亚洲人色婷婷成人网站在线观看 | 最新69国产成人精品免费视频动漫| 国产精品亚洲а∨无码播放麻豆 | 亚洲精品你懂的在线观看| av无码免费一区二区三区| 免费精品国产自产拍在线观看| 久久久久久久尹人综合网亚洲| 西西人体大胆免费视频| 亚洲国产成人久久一区久久| 精品视频在线免费观看| 亚洲国产精品无码久久九九大片| 亚洲亚洲人成综合网络|