Javaでは文字列は何バイトを占めますか?

王林
リリース: 2019-11-22 15:39:33
オリジナル
8203 人が閲覧しました

Javaでは文字列は何バイトを占めますか?

まず、char は Java の基本型であり、基本型が占めるバイト数は固定されており、たとえば、int は 4 バイト、double は 8 バイトを占めます。 Java を作成できる さまざまなプラットフォームで使用される型が固定されているため、Java の移植性が保証されます。したがって、Java の char 型は 2 バイトを固定的に占有します。 (注: char 型には漢字も格納できます)。

第 2 に、文字列はより柔軟な方法で保存されます。 String では、英語の 1 文字は 1 バイトを占めますが、中国語の文字はエンコーディングに応じて異なるバイト数を占めます。 UTF-8 エンコーディングでは、1 つの中国語文字は 3 バイトを占有しますが、GBK エンコーディングを使用すると、1 つの中国語文字は 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文字が1バイトを占めることがわかります。 2 (GBK エンコード) または 3 (UTF-8 エンコード) バイトを占有します。このメソッドを使用して他のエンコーディングのステータスを確認することもできますが、ここでは説明しません。

最後に、文字列の特性に基づいて、文字列に中国語の文字が含まれているかどうかを判断できます。例は次のとおりです:

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート