一、前言
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
}
往期精彩内容:
Java知识体系总结(2021版)
超详细的springBoot学习笔记
Java多线程基础知识总结(绝对经典)
Java面试题总结(附答案)
Vue基础知识总结(绝对经典)
常见数据结构与算法整理总结