字符
字符
大多数情况下,若使用单字符值,则采用 char 类型。例如:
char ch = 'a';
// Unicode for uppercase Greek omega character
char uniChar = '\u03A9';
// an array of chars
char[] charAarray = {'a', 'b', 'c', 'd', 'e'};
然而,有时你需要将字符作为对象使用——例如作为方法参数时,该参数要求传入对象。Java编程语言为此提供了一个包装类,它将字符”包装”成Character对象。Character类型的对象包含一个字段,其类型为字符。该Character类还提供了一系列有用的类方法(即静态方法)来操作字符。
你可以使用字符构造函数创建一个字符对象:
Character ch = new Character('a');
在某些情况下,Java编译器也会为你创建Character对象。例如,当你将原始char类型传递给期望接收对象的方法时,编译器会自动将char转换为Character。此功能称为autoboxing——若转换方向相反,则称为unboxing。有关自动装箱和拆箱的更多信息,请参阅”自动装箱与拆箱”章节。
注意:Character类是不可变的,因此一旦创建,Character对象就无法被修改。
下表列出了 Character 类中一些最实用的方法,但并非详尽无遗。如需查看该类所有方法的完整列表(超过50个),请参阅 Character API 规范。
- boolean isLetter(char ch) 和 boolean isDigit(char ch):分别判断指定的字符值是否为字母或数字。
- boolean isWhitespace(char ch): 判断指定的字符值是否为空白字符。
- boolean isUpperCase(char ch) 和 boolean isLowerCase(char ch):分别判断指定字符值是大写还是小写。
- char toUpperCase(char ch) 和 char toLowerCase(char ch): 返回指定字符值的大写或小写形式。
- toString(char ch):返回一个String对象,表示指定的字符值——即一个单字符字符串。
字符和码点
Java平台自JDK 1.0.2起便支持Unicode标准。Java SE 15支持Unicode 13.0。char数据类型和Character类基于原始Unicode规范,该规范将字符定义为固定宽度的16位实体。此后Unicode标准已修订,允许存在需要超过16位表示的字符。合法码点的范围现为U+0000至U+10FFFF,称为Unicode标量值。
字符值采用16位编码,因此可表示 0x0000 至 0xFFFF 之间的数值。这组字符有时被称为 Basic Multilingual Plane(BMP)。代码点大于 0xFFFF(记为U+FFFF)的字符称为 supplementary characters。
因此,一个char值代表 Basic Multilingual Plane(BMP)中的码点。一个int值则代表所有Unicode码点,包括补充码点。除非另有说明,否则对补充字符和代理字符值的行为如下:
- 仅接受 char 值的方法无法支持补充字符。它们将来自代理范围的char值视为未定义字符。
- 接受 int 值的方法支持所有Unicode字符,包括补充字符。
有关更多信息,请参阅 Character 类的文档。
转义序列
以反斜杠 \ 开头的字符是转义序列,对编译器具有特殊含义。下表列出了 Java 转义序列:
| 转义序列 | 含义 |
|---|---|
| \t | 在此处插入一个制表符(tab)。 |
| \b | 在此处文本中插入一个退格符(backspace)。 |
| \n | 在此处文本中插入换行符(line feed)。 |
| \r | 在此处文本中插入回车符(carriage return)。 |
| \f | 在此处文本中插入换页符(form feed)。 |
| \' | 在此处插入单引号字符(')。 |
| \" | 在此处插入双引号字符(")。 |
| \\\ | 在此处插入反斜杠字符(\)。 |
当打印语句中遇到转义序列时,编译器会进行相应处理。例如,若要在引号内嵌套引号,必须在内部引号处使用转义序列”,。要打印句子
She said "Hello!" to me.
必须使用如下代码:
IO.println("She said \"Hello!\" to me.");