Java Character 类

在 Java 中,Character 类是 java.lang 包的一部分,它是基本数据类型 char 的包装类Character 类提供了一系列实用方法,用于操作、判断和转换字符。今天我们就来系统学习这个类!🚀


1️⃣ 基本概述

  • char 是基本数据类型,表示一个 16 位的 Unicode 字符(如 'A''中''9' 等)。
  • Character 是包装类,用于将 char 封装为一个对象,并提供丰富的方法操作字符。

声明示例:

1
2
3
char ch = 'A';                     // 基本类型
Character character = 'A'; // 自动装箱为 Character 对象
Character character2 = new Character('B'); // 显式创建对象(已过时,不推荐)

2️⃣ 常用方法

🔹 判断字符类型的方法

这些方法会返回一个布尔值,告诉你这个字符属于哪种类型。

1
2
3
4
5
6
7
8
9
10
11
public class CharacterCheckExample {
public static void main(String[] args) {
char ch = 'A';

System.out.println(Character.isLetter(ch)); // 判断是否是字母 -> true
System.out.println(Character.isDigit(ch)); // 判断是否是数字 -> false
System.out.println(Character.isUpperCase(ch)); // 判断是否是大写字母 -> true
System.out.println(Character.isLowerCase(ch)); // 判断是否是小写字母 -> false
System.out.println(Character.isWhitespace(' ')); // 判断是否是空白字符 -> true
}
}

🔹 字符转换的方法

这些方法用于对字符进行大小写、数字等转换。

1
2
3
4
5
6
7
8
9
10
public class CharacterConversionExample {
public static void main(String[] args) {
char ch = 'a';

System.out.println(Character.toUpperCase(ch)); // 转大写 -> 'A'
System.out.println(Character.toLowerCase('Z')); // 转小写 -> 'z'
System.out.println(Character.forDigit(9, 10)); // 数字转字符 -> '9'
System.out.println(Character.digit('8', 10)); // 字符转数字 -> 8
}
}

🔹 判断字符 Unicode 编码范围

1
2
3
4
5
6
7
8
9
public class UnicodeCheckExample {
public static void main(String[] args) {
char ch = '中';

System.out.println(Character.UnicodeBlock.of(ch)); // 判断字符所属的 Unicode 区块 -> CJK Unified Ideographs
System.out.println(Character.isSurrogate(ch)); // 判断是否是代理字符 -> false
System.out.println(Character.charCount(ch)); // 判断字符占几个代码单元 -> 1(普通字符是 1,特殊符号可能是 2)
}
}

3️⃣ Character 类的静态常量

Character 类中定义了一些有用的字符类型常量:

1
2
3
4
System.out.println(Character.MIN_VALUE);      // 最小字符 -> '\u0000'
System.out.println(Character.MAX_VALUE); // 最大字符 -> '\uffff'
System.out.println(Character.MIN_RADIX); // 最小进制 -> 2
System.out.println(Character.MAX_RADIX); // 最大进制 -> 36

4️⃣ 自动装箱与拆箱

Java 提供了自动装箱(autoboxing)和自动拆箱(unboxing),可以让基本类型 char 和包装类 Character 相互转换。

1
2
3
4
5
6
7
8
9
10
11
12
public class AutoboxingExample {
public static void main(String[] args) {
// 自动装箱
Character character = 'A';

// 自动拆箱
char ch = character;

System.out.println(character); // 'A'
System.out.println(ch); // 'A'
}
}

5️⃣ 字符比较

🔹 使用 equals() 方法比较对象

包装类比较不能直接用 ==,要用 .equals()

1
2
3
4
5
Character ch1 = 'A';
Character ch2 = 'A';

System.out.println(ch1.equals(ch2)); // true
System.out.println(ch1 == ch2); // true(由于字符范围小,Java 对字符池进行了缓存,超出范围会返回 false)

6️⃣ 综合例子

需求:判断一个字符是数字、字母还是其他,并将字母统一转换为大写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;

public class CharacterTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符:");
char input = scanner.next().charAt(0);

if (Character.isDigit(input)) {
System.out.println(input + " 是一个数字");
} else if (Character.isLetter(input)) {
System.out.println(input + " 是一个字母,转换为大写:" + Character.toUpperCase(input));
} else {
System.out.println(input + " 是一个其他字符");
}
}
}

示例输出:

1
2
请输入一个字符:a
a 是一个字母,转换为大写:A

7️⃣ 小技巧 & 注意事项

  • Character 类的对象是不可变的。一旦创建,就不能更改其值。
  • 字符比较推荐用 equals(),不要直接用 ==,避免对象引用问题。
  • Character 类非常适合字符校验、转换、处理 Unicode 字符。

方法表格

Character 类是 Java 中用于处理单个字符的包装类,提供了许多实用方法来判断、转换和操作字符。我们来总结一下它的重要方法!💡


🔍 判断类方法(返回布尔值)

方法 功能说明 示例
isLetter(char ch) 判断是否为字母 Character.isLetter('A')true
isDigit(char ch) 判断是否为数字 Character.isDigit('8')true
isLetterOrDigit(char ch) 判断是否为字母或数字 Character.isLetterOrDigit('$')false
isWhitespace(char ch) 判断是否为空白字符 Character.isWhitespace(' ')true
isUpperCase(char ch) 判断是否为大写字母 Character.isUpperCase('A')true
isLowerCase(char ch) 判断是否为小写字母 Character.isLowerCase('a')true
isJavaIdentifierStart(char ch) 判断字符是否可以作为 Java 标识符开头 Character.isJavaIdentifierStart('_')true
isJavaIdentifierPart(char ch) 判断字符是否可以作为 Java 标识符的一部分 Character.isJavaIdentifierPart('1')true

🔄 转换类方法

方法 功能说明 示例
toUpperCase(char ch) 转换为大写字母 Character.toUpperCase('a')'A'
toLowerCase(char ch) 转换为小写字母 Character.toLowerCase('A')'a'
toString(char ch) 将字符转换为字符串 Character.toString('J')"J"

💡 获取类方法

方法 功能说明 示例
getType(char ch) 获取字符的类型(如字母、数字等) Character.getType('A')1(代表字母)
getNumericValue(char ch) 获取字符的数值(如数字字符的数值) Character.getNumericValue('8')8
charCount(int codePoint) 判断 Unicode 字符是否需要一个或两个 char 单元表示 Character.charCount(65)1
toChars(int codePoint) 将 Unicode 代码点转换为字符数组 Character.toChars(65)['A']

🧠 特殊方法

方法 功能说明 示例
compare(char x, char y) 比较两个字符大小 Character.compare('A', 'B')-1
hashCode(char ch) 获取字符的哈希码 Character.hashCode('J')74
valueOf(char ch) 将字符转换为 Character 对象 Character.valueOf('J')'J'(对象)

8️⃣ 练习题

🧠 问题 1:判断一个输入字符是否是英文字母,并转换为相反大小写(大写转小写,小写转大写)。

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Scanner;
public class Charrr {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符:");
char input = scanner.next().charAt(0);
char result = (Character.isLetter(input)) ? (Character.isUpperCase(input)) ? Character.toLowerCase(input) : Character.toUpperCase(input) : '否';
System.out.print(result);

}
}

🧠 问题 2:编写一个方法,统计字符串中数字、字母和其他字符的个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
//编写一个方法,统计字符串中数字、字母和其他字符的个数。
public class Count {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入字符串:");
String input = scanner.nextLine();
int number_ = 0, character_ = 0, space = 0;
for(int i = 0;i < input.length();i++){
char CureentChar = input.charAt(i);
if (Character.isDigit(CureentChar)){
number_++;
} else if (Character.isLetter(CureentChar)) {
character_++;
} else if (Character.isSpaceChar(CureentChar)) {
space++;

}
}
System.out.println( "字符的数量是: " + character_ );
System.out.println("数字的数量是: " + number_);
System.out.println("空白字符的数量是: " + space);

}
}

1
2
3
4
请输入字符串:sdffffff 4444 """""" ;[
字符的数量是: 8
数字的数量是: 4
空白字符的数量是: 3

🧠 问题 3:将一个字符数组中的所有小写字母转为大写字母。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
public class ReplaceUS {
public static void main(String[] args){
System.out.println("请输入字字符串");
Scanner scan = new Scanner(System.in);
StringBuilder input = new StringBuilder(scan.nextLine());
for (int i = 0;i < input.length();i++){
if (Character.isLowerCase(input.charAt(i))){
char rp = Character.toUpperCase(input.charAt(i));
input.replace(i,i+1,String.valueOf(rp));

}
}
System.out.println("转换后的字符串是:" + input);
scan.close();
}
}
1
2
3
请输入字字符串
fadsfsagFFFF;;;79779
转换后的字符串是:FADSFSAGFFFF;;;79779

注意,replace(int start, int end, String str)接受String str类,需要使用String.valueOf(char)进行类型转换后再传参。


学会 Character 类,你就可以在字符处理、校验和转换中游刃有余啦!💡 有问题或练习需要解答,欢迎告诉我!💬🌱