在Java中按位元組獲得字串長度的兩種方法

來源:互聯網
上載者:User

由於Java是基於Unicode編碼的,因此,一個漢字的長度為1,而不是2。但有時需要以位元組單位獲得字串的長度。例如,“123abc長城”按位元組長度計算是10,而按Unicode計算長度是8。為了獲得10,需要從頭掃描根據字元的Ascii來獲得具體的長度。如果是標準的字元,Ascii的範圍是0至255,如果是漢字或其他全形字元,Ascii會大於255。因此,可以編寫如下的方法來獲得以位元組為單位的字串長度。

    public int getWordCount(String s)
    {
        int length = 0;
        for(int i = 0; i < s.length(); i++)
        {
            int ascii = Character.codePointAt(s, i);
            if(ascii >= 0 && ascii <=255)
                length++;
            else
                length += 2;
                
        }
        return length;
        
    }

    當然,也可以採用Regex來簡化上面的方法,代碼如下:

    public  int getWordCount(String s)
    {

        s = s.replaceAll("[^//x00-//xff]", "**");
        int length = s.length();
        return length;
    }

    上面代碼的基本原理是將字串中所有的非標準字元(雙位元組字元)替換成兩個標準字元(**,或其他的也可以)。這樣就可以直接例用length方法獲得字串的位元組長度了。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.