Java.lang.Character类详解

一、前言
Character将一个char基本数据类型封装在类中。这个类中只有一char类型的变量。Character是基于unicode码进行的Character所有的方法,都是围绕着这个char基本数据类型的值进行操作的。

二、ASCII控制字符
二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 NUL ␀ 空字符(Null)
0000 0001 1 01 SOH ␁ 标题开始
0000 0010 2 02 STX ␂ 本文开始
0000 0011 3 03 ETX ␃ 本文结束
0000 0100 4 04 EOT ␄ 传输结束
0000 0101 5 05 ENQ ␅ 请求
0000 0110 6 06 ACK ␆ 确认回应
0000 0111 7 07 BEL ␇ 响铃
0000 1000 8 08 BS ␈ 退格
0000 1001 9 09 HT ␉ 水平定位符号
0000 1010 10 0A LF ␊ 换行键
0000 1011 11 0B VT ␋ 垂直定位符号
0000 1100 12 0C FF ␌ 换页键
0000 1101 13 0D CR ␍ 归位键
0000 1110 14 0E SO ␎ 取消变换(Shift out)
0000 1111 15 0F SI ␏ 启用变换(Shift in)
0001 0000 16 10 DLE ␐ 跳出数据通讯
0001 0001 17 11 DC1 ␑ 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 DC2 ␒ 设备控制二
0001 0011 19 13 DC3 ␓ 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 ␔ 设备控制四
0001 0101 21 15 NAK ␕ 确认失败回应
0001 0110 22 16 SYN ␖ 同步用暂停
0001 0111 23 17 ETB ␗ 区块传输结束
0001 1000 24 18 CAN ␘ 取消
0001 1001 25 19 EM ␙ 连接介质中断
0001 1010 26 1A SUB ␚ 替换
0001 1011 27 1B ESC ␛ 跳出
0001 1100 28 1C FS ␜ 文件分割符
0001 1101 29 1D GS ␝ 组群分隔符
0001 1110 30 1E RS ␞ 记录分隔符
0001 1111 31 1F US ␟ 单元分隔符
0111 1111 127 7F DEL ␡
删除

三、ASCII可显示字符
二进制 十进制 十六进制 图形
0010 0000 32 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 34 22 "
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25  %
0010 0110 38 26 &
0010 0111 39 27 ’
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D -
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
 
二进制 十进制 十六进制 图形
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
 
二进制 十进制 十六进制 图形
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~
 四、代码实例
1、char、int互相转化
/**

  • char类型变量可以强制转化为int类型变量,反之亦然
    */
    private static void test01() {
    char a = ‘a’;
    int b = 98;
    System.out.println((int)a);//97
    System.out.println((char)b);//b
    char c = ‘b’;
    System.out.println("98 == b --> "+ (b == c));//true
    }

private static void test02() {
char a = ‘a’;
int[] arr = new int[100];
for(int i = 0;i<100;i++) {
arr[i] = i;
}
System.out.println(arr[1]);//1
System.out.println(arr[99]);//99
System.out.println((int)a);//97
System.out.println(“char自动转为int:”+arr[a]);//97
}
2、 判断是否是数字或字母
**

  • 判断是否是数字或字母
    /
    private static void test03() {
    //数字
    System.out.println(“Character.isDigit(‘1’) -->”+Character.isDigit(‘1’));//true
    System.out.println(“Character.isDigit(‘a’) -->”+Character.isDigit(‘a’));//false
    //空格
    System.out.println(“Character.isSpaceChar(‘1’) -->”+Character.isSpaceChar(‘1’));//false
    Character.isSpaceChar(‘a’);
    System.out.println(“Character.isSpaceChar(‘a’) -->”+Character.isSpaceChar(‘a’));//false
    Character.isSpaceChar(’ ‘);
    System.out.println("Character.isSpaceChar(’ ‘) -->"+Character.isSpaceChar(’ ‘));//true
    //字母
    System.out.println(“Character.isLetter(‘1’) -->”+Character.isLetter(‘1’));//false
    System.out.println(“Character.isLetter(‘a’) -->”+Character.isLetter(‘a’));//true
    System.out.println(“Character.isLetter(‘张’) -->”+Character.isLetter(‘张’));//true, 汉字算字母?
    //数字或字母
    System.out.println(“Character.isLetterOrDigit(‘1’) -->”+Character.isLetterOrDigit(‘1’));//true
    System.out.println(“Character.isLetterOrDigit(‘a’) -->”+Character.isLetterOrDigit(‘a’));//true
    System.out.println(“Character.isLetterOrDigit(‘张’) -->”+Character.isLetterOrDigit(‘张’));//true, 汉字算字母?
    System.out.println("Character.isLetterOrDigit(’ ‘) -->"+Character.isLetterOrDigit(’ '));//false
    }
    3、获取字符串中某个位置上的字符
    /
    *

  • codePointAt:获取字符串中某个位置上的字符
    */
    private static void test06() {
    //获取字符串中某个位置上的字符
    int codePointAt = Character.codePointAt(“abcdef”, 1);
    System.out.println(“Character.codePointAt(“abcdef”, 1) -->” + codePointAt);//98
    codePointAt = Character.codePointAt(“123456789”, 1);
    System.out.println(“Character.codePointAt(“123456789”, 1) -->” + codePointAt);//50
    CharSequence seq = “/ 123456789”;//这个是图形?
    codePointAt = Character.codePointAt(seq, 0);
    System.out.println(codePointAt);//预计是47? --> 47
    codePointAt = Character.codePointAt(seq, 1);
    System.out.println(codePointAt);//预计是32? --> 还真是32

    //CharSequence是一个接口,String、StringBuffer、StringBuilder类都是CharSequence的子接口;
    CharSequence seq1 = “*123456”;//这个是图形?
    codePointAt = Character.codePointAt(seq1, 0);
    System.out.println(codePointAt);//预计是42? --> 42

    String seq2 = “123456";//这个是图形?
    codePointAt = Character.codePointAt(seq2, 0);
    System.out.println(codePointAt);//预计是42? --> 42
    System.out.println("
    ******”);
    char[] cArr = { ‘a’, ‘b’, ‘c’ };
    System.out.println(Character.codePointAt(cArr, 1)); //98
    // 获取指定位置字符的代码点。第二个参数的值一定要小于第三个参数,否则异常
    System.out.println(Character.codePointAt(cArr, 0, 1)); //97 why?第三个参数有何用???
    System.out.println(Character.codePointAt(cArr, 0, 2)); //97 why?
    System.out.println(Character.codePointAt(cArr, 0, 3)); //97 why?
    System.out.println(Character.codePointAt(cArr, 1, 2)); //98 why?
    System.out.println(Character.codePointAt(cArr, 1, 3)); //98 why?
    }
    看codePointAt源码,第三个参数limit貌似只起到了限定作用,第二个参数的值一定要小于第三个参数,否则异常,那岂不是大于第二个参数的都一样了???

public static int codePointAt(char[] a, int index, int limit) {
if (index >= limit || limit < 0 || limit > a.length) {
throw new IndexOutOfBoundsException();
}
return codePointAtImpl(a, index, limit);
}

// throws ArrayIndexOutOfBoundsException if index out of bounds
static int codePointAtImpl(char[] a, int index, int limit) {
char c1 = a[index];
if (isHighSurrogate(c1) && ++index < limit) {
char c2 = a[index];
if (isLowSurrogate(c2)) {
return toCodePoint(c1, c2);
}
}
return c1;
}
4、判断是否为大小写字母
/**

  • isLowerCase:判断是否为小写字母
    /
    private static void test07() {
    // 将一个代码点转化为字符
    System.out.println(Character.toChars(24352));//张
    // 判断是否为小写字母
    System.out.println(Character.isLowerCase(‘1’));//false
    System.out.println(Character.isLowerCase(‘a’));//true
    System.out.println(Character.isLowerCase(‘A’));//false
    System.out.println(Character.isLowerCase(’ '));//false
    System.out.println(Character.isLowerCase(‘张’));//false
    System.out.println("
    *****");
    // 通过codepoint来判断是否为小写字母
    System.out.println("isLowerCase: " + Character.isLowerCase(65)); //A --> false
    System.out.println("isLowerCase: " + Character.isLowerCase(42)); //
    --> false
    System.out.println("isLowerCase: " + Character.isLowerCase(112)); //p --> true
    // 判断是否为大写字母
    System.out.println(Character.isUpperCase(‘1’));//false
    System.out.println(Character.isUpperCase(‘a’));//false
    System.out.println(Character.isUpperCase(‘A’));//true
    System.out.println(Character.isUpperCase(’ '));//false
    System.out.println(Character.isUpperCase(‘张’));//false
    }
    5、UDC:通用十进制分类法
    /

  • isLowSurrogate:该函数返回一个布尔值。如果char值介于MIN_LOW_SURROGATE和MAX_LOW_SURROGATE(含)之间,则返回的值为True,否则为False。

  • UDC:通用十进制分类法

  • UDC分类号中文版:https://wenku.baidu.com/view/a2b50d15866fb84ae45c8dc6.html
    */
    private static void test08() {
    char minLowSurrogate = Character.MIN_LOW_SURROGATE;
    System.out.println(Character.MIN_LOW_SURROGATE);//输出? --> 为何会输出?
    System.out.println(Character.MAX_LOW_SURROGATE);//输出? --> 为何会输出?
    // 判断是否为低位代理
    System.out.println(Character.isLowSurrogate(‘a’)); //false
    System.out.println(Character.isLowSurrogate(’?’)); //false
    System.out.println(Character.isLowSurrogate(’\udc25’)); //true
    System.out.println(Character.isLowSurrogate(’\udc29’)); //true
    System.out.println(Character.isLowSurrogate(’\udc31’)); //true
    }
    6、一些常见的其它方法
    private static void test04() {
    // Character类将一个char基本数据类型封装在类中。这个类中只有一char类型的变量。Character是基于unicode码进行的
    // Character所有的方法,都是围绕着这个char基本数据类型的值进行操作的。
    Character z = new Character(‘张’);//24352
    // 获取Character类中封装的char基本数据类型变量的hash码值。也可理解为获得Character对象的hash码值,从源码看就是返回强制转换为int类型后的值。
    System.out.println(z.hashCode());
    // 将一个char基本数据类型的数据封装成一个Character类型的对象
    System.out.println(Character.valueOf(‘a’)); //a
    System.out.println(“z.charValue() -->”+z.charValue());//张
    // 判断参数中的字符是否为为候补码,也就是说字符转化为数字后是否大于等于65535,如果参数直接为数字,那就看数字是否大于等于65535,是的话返回2,否则返回1
    // 字符在计算机中都是用数字表示的,一个char类型占16位二进制,转成十进制后可以表示65536种字符,也就是说每个字符都可以用一个数字表示,当这数字大于65535说明
    // 这个字符为扩充候补字符。
    System.out.println(“Character.charCount(‘在’); -->”+Character.charCount(‘在’));//1
    System.out.println(“Character.charCount(‘0’); -->”+Character.charCount(‘0’));//1
    System.out.println(“Character.charCount(‘a’); -->”+Character.charCount(‘a’));//1
    System.out.println(“Character.charCount(’ '); -->”+Character.charCount(’ ‘));//1
    System.out.println(“Character.charCount(65535); -->”+Character.charCount(65535));//1
    System.out.println(“Character.charCount(65536); -->”+Character.charCount(65536));//2
    System.out.println(“Character.charCount(100000); -->”+Character.charCount(100000));//2
    //比较类型和值是否都相同
    System.out.println(z.equals(123));//false
    System.out.println(Character.valueOf(z));//张
    System.out.println(z.equals(‘张’));//true
    // 判断字符有没有对应的unicode形式,就是通过unicode中是否定义了字符的unicode写法
    System.out.println("isDefined: " + Character.isDefined(’!’)); //true
    System.out.println(Character.isDefined(123)); //true
    // 是否为合法java变量名要求的能用于开头的字符(数字,字母下划线和$)
    System.out.println("isJavaIdentifierStart: " + Character.isJavaIdentifierStart(’@’)); //false
    System.out.println("isJavaIdentifierStart: " + Character.isJavaIdentifierStart(123)); //false

    // 判断是否为一个合法的java变量所包含的字符
    System.out.println("isJavaIdentifierPart: " + Character.isJavaIdentifierPart(’$’)); //true

    // 小写字母或者用小写字母的codepoint转大写
    System.out.println(“toLowerCase:” + Character.toLowerCase(‘A’)); //a
    System.out.println(“toLowerCase:” + Character.toLowerCase(65)); //97

    // 大写字母或者用大写字母的codepoint转小写
    System.out.println(“toLowerCase:” + Character.toUpperCase(‘a’)); //A
    System.out.println(“toLowerCase:” + Character.toUpperCase(97)); //65
    }
     
    ————————————————
    版权声明:本文为CSDN博主「GooReey」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/guorui_java/article/details/113827704

你可能感兴趣的:(Java.lang.Character类详解)