Maison > Java > Javacommencer > Combien d'octets une chaîne occupe-t-elle en Java ?

Combien d'octets une chaîne occupe-t-elle en Java ?

王林
Libérer: 2019-11-22 15:39:33
original
8250 Les gens l'ont consulté

Combien d'octets une chaîne occupe-t-elle en Java ?

Tout d'abord, char est le type de base de Java. Le nombre d'octets occupés par le type de base est fixe. Par exemple, int occupe 4 octets et double occupe 8 octets. peut faire Java Les types occupés sur les différentes plateformes sont fixes, ce qui garantit la portabilité de Java. Par conséquent, le type char en Java occupe fixement 2 octets. (Remarque : le type char peut également stocker un caractère chinois).

Deuxièmement, String est stocké de manière plus flexible. Dans String, un caractère anglais occupe 1 octet, tandis que les caractères chinois occupent un nombre d'octets différent selon l'encodage. Avec le codage UTF-8, un caractère chinois occupe 3 octets ; avec le codage GBK, un caractère chinois occupe 2 octets.

Le code du test est le suivant :

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);
    }

}
Copier après la connexion

Résultat de sortie :

utf-8编码下’hello’所占的字节数: 5
gbk编码下’hello’所占的字节数: 5
utf-8编码下’你好abc’所占的字节数: 9
gbk编码下你好’你好abc’所占的字节数: 7
Copier après la connexion

On peut voir que pour String, un caractère anglais occupe 1 octet de caractères chinois. occupent 2 (codage GBK) ou 3 (codage UTF-8) octets. Vous pouvez également utiliser cette méthode pour vérifier l’état d’autres encodages, qui ne seront pas décrits ici.

Enfin, en fonction des caractéristiques de String, vous pouvez déterminer si une chaîne contient des caractères chinois :

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 + "' 中无汉字");
        }
    }

}
Copier après la connexion

Résultat de sortie :

‘Good morning’ 中无汉字
‘hello 早上好’ 中的汉字为:早上好
Copier après la connexion

Tutoriel recommandé : Tutoriel d'introduction à Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal