• Java中一个char可以表示一个汉字吗?


    问题:Java中一个char可以表示一个汉字吗?

     1 import java.io.UnsupportedEncodingException;
     2 import java.nio.ByteBuffer;
     3 import java.nio.CharBuffer;
     4 import java.nio.charset.Charset;
     5 
     6 /**
     7  * Java中一个char可以表示一个汉字吗?
     8  * 汉字是否可以只占两个字节?
     9  */
    10 public class BytesOfChart {
    11 
    12     public static void main(String[] args) throws UnsupportedEncodingException {
    13         char c = 'a';
    14         char c1 = '中';
    15         String str = "a";
    16         String str1 = "中";
    17         String str2 = "A";
    18 
    19         System.out.println("编码为UTF8:");
    20         System.out.println("char值为英文字符所占字节长度:" + getBytesUTF8(c).length);
    21         System.out.println("char值为中文字符所占字节长度:" + getBytesUTF8(c1).length);
    22 
    23         System.out.println("编码为GBK:");
    24         System.out.println("char值为英文字符所占字节长度:" + getBytesGBK(c).length);
    25         System.out.println("char值为中文字符所占字节长度:" + getBytesGBK(c1).length);
    26 
    27         System.out.println("编码为UTF8:");
    28         System.out.println("String值为英文字符所占字节长度:" + str.getBytes("utf-8").length);
    29         System.out.println("String值为中文字符所占字节长度:" + str1.getBytes("utf-8").length);
    30 
    31         System.out.println("编码为GBK:");
    32         System.out.println("String值为英文字符所占字节长度:" + str.getBytes("GBK").length);
    33         System.out.println("String值为中文字符所占字节长度:" + str1.getBytes("GBK").length);
    34 
    35         //这块str2好像不是全角的,全角占两个字节
    36         System.out.println("String值为英文字母(全角)所占字节长度:" + str2.getBytes("GBK").length);
    37     }
    38 
    39     public static byte[] getBytesUTF8(char c) {
    40         Charset charset = Charset.forName("utf-8");
    41         CharBuffer allocate = CharBuffer.allocate(1);
    42         allocate.put(c);
    43         allocate.flip();
    44         ByteBuffer encode = charset.encode(allocate);
    45         return encode.array();
    46     }
    47 
    48     public static byte[] getBytesGBK(char c) {
    49         Charset charset = Charset.forName("GBK");
    50         CharBuffer allocate = CharBuffer.allocate(1);
    51         allocate.put(c);
    52         allocate.flip();
    53         ByteBuffer encode = charset.encode(allocate);
    54         return encode.array();
    55     }
    56 
    57 }

     控制台结果:

    编码为UTF8:
    char值为英文字符所占字节长度:1
    char值为中文字符所占字节长度:3
    编码为GBK:
    char值为英文字符所占字节长度:2
    char值为中文字符所占字节长度:2
    编码为UTF8:
    String值为英文字符所占字节长度:1
    String值为中文字符所占字节长度:3
    编码为GBK:
    String值为英文字符所占字节长度:1
    String值为中文字符所占字节长度:2
    String值为英文字母(全角)所占字节长度:1

    提示:char类型的值完全可以参与加减乘除运算,原因在于它们在运算时是用的该字符对应的编码进行运算!

    1         char c2 = 'u9992';
    2         System.out.println(c2 + 34); //39348
    3         char c3 = 9;
    4         System.out.println(c3 + 34); //43
    5         char c4 = '9';
    6         System.out.println(c4 + 34); //91     
  • 相关阅读:
    ListView
    Android 控件知识点
    Android之alertDialog、ProgressDialog
    Android 控件知识点,
    知晓当前是哪一个活动
    Activity的启动模式
    iOS9之Bitcode
    Xcode7免证书真机调试实践
    XCode6之后预编译文件的创建
    Swift计算文本宽高
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11918020.html
Copyright © 2020-2023  润新知