首頁 >Java >Java入門 >java中字串佔幾個位元組

java中字串佔幾個位元組

王林
王林原創
2019-11-22 15:39:338263瀏覽

java中字串佔幾個位元組

首先,char為Java的基本型別,基本型別所佔的位元組數是固定的,如int佔4位元組,double佔8位元組,這可以讓Java在不同的平台上所佔類型固定,很好地保證了Java的可移植性。因此,Java中char類型固定佔2個位元組。 (註:char類型也可以儲存一個漢字)。

其次,String採用更靈活的方式進行儲存。在String中,一個英文字元佔1個字節,而中文字元根據編碼的不同所佔位元組數也不同。在UTF-8編碼下,一個中文字元佔3個位元組;而使用GBK編碼時一個中文字元佔2個位元組。

測試程式碼如下:

import java.io.UnsupportedEncodingException;

public class StrTest {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str1 = "hello";
        String str2 = "你好abc";

        System.out.println("utf-8编码下'hello'所占的字节数:" + str1.getBytes("utf-8").length);
        System.out.println("gbk编码下'hello'所占的字节数:" + str1.getBytes("gbk").length);

        System.out.println("utf-8编码下'你好abc'所占的字节数:" + str2.getBytes("utf-8").length);
        System.out.println("gbk编码下你好'你好abc'所占的字节数:" + str2.getBytes("gbk").length);
    }

}

輸出結果:

utf-8编码下’hello’所占的字节数: 5
gbk编码下’hello’所占的字节数: 5
utf-8编码下’你好abc’所占的字节数: 9
gbk编码下你好’你好abc’所占的字节数: 7

由此可見,對也String來說,一個英文字元固定佔1個位元組,而中文字元佔2個(GBK編碼)或3個(UTF-8編碼)位元組。也可使用此方法查看其它編碼的情況,此處不再一一贅述。

最後,基於String的這個特性,可以判斷字串中是否包含中文,舉例如下:

public class StrTest {

    public static void main(String[] args) throws UnsupportedEncodingException {
        searchChineseCharacter("Good morning");
        searchChineseCharacter("hello 早上好");
    }

    //找出一个字符串中的汉字
    public static void searchChineseCharacter(String str){
        //正则表达式,用于匹配中文字符
        String regex = "[\u4e00-\u9fa5]";

        //如果str的长度和其所占字节数不等,说明包含中文
        if (str.length() != str.getBytes().length){
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            System.out.print("'" + str + "' 中的汉字为:");

            while (matcher.find()){
                System.out.print(matcher.group());
            }
        }

        else {
            System.out.println("'" + str + "' 中无汉字");
        }
    }

}

輸出結果:

‘Good morning’ 中无汉字
‘hello 早上好’ 中的汉字为:早上好

推薦教學:java入門教學

以上是java中字串佔幾個位元組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn