Skip to content

Java 字符

在 Java 中,单个字符通常使用原始数据类型(primitive data type)char 来表示。

char grade = 'A';
char firstInitial = 'J';
char punctuation = '.';
// char 代表 Unicode 字符。
// 你可以使用 Unicode 转义序列:
char greekOmega = '\u03A9'; // 大写希腊字母 Omega (Ω)
char copyrightSymbol = '\u00A9'; // 版权符号 (©)
// char 可以存储在数组中:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
System.out.println("Grade: " + grade);
System.out.println("Omega: " + greekOmega);
System.out.println("First vowel: " + vowels[0]);

虽然 char 原始类型效率很高,但在某些情况下,你需要将字符视为对象(object)。这在使用 Java 集合(Collections)(例如 ArrayList<Character>)或某个方法需要对象时很常见。

Java 提供了 java.lang.Character 类,它是原始类型 char 的包装类(wrapper class)。它允许你将一个字符值视为一个对象。

自动装箱与拆箱:

Java 会在需要时自动在 char 原始类型和 Character 对象之间进行转换。这个过程称为自动装箱(autoboxing)(原始类型到包装类)和拆箱(unboxing)(包装类到原始类型)。

// 自动装箱:原始类型 char 'a' 自动转换为 Character 对象
Character charObject = 'a';
// 拆箱:Character 对象自动转换为原始类型 char
char primitiveChar = charObject;
// 方法期望接收 Object 类型的示例:
ArrayList<Character> charList = new ArrayList<>();
charList.add('x'); // 自动装箱:'x' 在添加前转换为 Character 对象
char retrievedChar = charList.get(0); // 拆箱:取出的 Character 对象转换为 'x'

虽然你可以通过 new Character(‘c’) 显式地创建 Character 对象,但由于自动装箱的存在,这通常是不必要的,而且通常不被鼓励(并且在未来的 Java 版本中已标记为过时)。请依赖自动装箱。

Character 类提供了许多用于处理字符的实用静态方法:

方法签名描述
Character.isLetter(char ch)检查字符是否为字母。
Character.isDigit(char ch)检查字符是否为数字 (0-9)。
Character.isLetterOrDigit(char ch)检查字符是否为字母或数字。
Character.isWhitespace(char ch)检查字符是否为空白字符(根据 Java 的定义,包括空格、制表符、换行符等)。
Character.isUpperCase(char ch)检查字符是否为大写字母。
Character.isLowerCase(char ch)检查字符是否为小写字母。
Character.toUpperCase(char ch)将字符转换为其大写等效字符(如果存在)。
Character.toLowerCase(char ch)将字符转换为其小写等效字符(如果存在)。
Character.toString(char ch)将字符转换为仅包含该字符的 String。(等同于 String.valueOf(ch))。
Character.getNumericValue(char ch)返回字符表示的整数值(例如,‘5’ -> 5)。如果不是有效的非负整数则返回 -1,如果不是数字字符则返回 -2。

使用静态方法的示例:

public class CharacterMethodsDemo {
public static void main(String[] args) {
char ch1 = 'a';
char ch2 = '7';
char ch3 = ' '; // 空格
char ch4 = 'Z';
System.out.println("'" + ch1 + "' is letter? " + Character.isLetter(ch1)); // true
System.out.println("'" + ch2 + "' is digit? " + Character.isDigit(ch2)); // true
System.out.println("'" + ch3 + "' is whitespace? " + Character.isWhitespace(ch3)); // true
System.out.println("'" + ch4 + "' is uppercase? " + Character.isUpperCase(ch4)); // true
System.out.println("'" + ch1 + "' to uppercase: " + Character.toUpperCase(ch1)); // A
System.out.println("'" + ch4 + "' to lowercase: " + Character.toLowerCase(ch4)); // z
System.out.println("Numeric value of '" + ch2 + "': " + Character.getNumericValue(ch2)); // 7
}
}

在字符字面量或字符串字面量中,某些字符在前面加上反斜杠 (</code>) 时具有特殊含义。这些被称为转义序列(escape sequences)。

常用转义序列:

转义序列描述
\t插入一个水平制表符。
\b插入一个退格符(很少使用,效果取决于终端)。
\n插入一个换行符。
\r插入一个回车符。
\f插入一个换页符(很少使用)。
‘插入一个单引号字符(在单引号内需要转义:char quote = ''';)。
“插入一个双引号字符(在双引号内需要转义:String quoted = “He said “Hi!"";)。
\插入一个反斜杠字符本身。

示例:

public class EscapeSequenceDemo {
public static void main(String[] args) {
// 在 String 中使用转义序列
System.out.println("Column A\tColumn B"); // 制表符分隔
System.out.println("Line 1\nLine 2"); // 换行
System.out.println("She said: \"Hello!\""); // 字符串中的双引号
System.out.println("This is a backslash: \\"); // 字面反斜杠
// 在 char 字面量中使用转义序列
char singleQuote = '\'';
System.out.println("Single quote character: " + singleQuote);
}
}

预期输出:

Column A Column B
Line 1
Line 2
She said: "Hello!"
This is a backslash: \
Single quote character: '

理解字符对于处理文本至关重要。下一节将更详细地探讨 String 类,它代表字符序列,是 Java 中最常用的类之一。