在 Java 中,将 String 转换为 char 或 char[](字符数组)有多种方法,下面我将详细介绍这些方法,并提供相应的代码示例和注意事项。

(图片来源网络,侵删)
将整个 String 转换为 char[](字符数组)
如果你想把 String 中的所有字符都提取出来,可以使用 String.toCharArray() 方法。
示例代码:
public class StringToCharExample {
public static void main(String[] args) {
String str = "Hello";
// 将 String 转换为 char[]
char[] charArray = str.toCharArray();
// 打印字符数组
System.out.println("字符数组: " + java.util.Arrays.toString(charArray));
// 输出: 字符数组: [H, e, l, l, o]
// 遍历字符数组
System.out.println("遍历字符数组:");
for (char c : charArray) {
System.out.print(c + " ");
}
// 输出: H e l l o
}
}
说明:
toCharArray()是String类的一个实例方法,它会返回一个新的char[]数组,包含String中的所有字符。- 原始
String不会被修改。
获取 String 中指定位置的 char
如果你只需要 String 中的某一个字符(比如第一个字符、最后一个字符等),可以使用 String.charAt(int index) 方法。
示例代码:
public class StringToCharExample {
public static void main(String[] args) {
String str = "Hello";
// 获取第一个字符(索引从 0 开始)
char firstChar = str.charAt(0);
System.out.println("第一个字符: " + firstChar); // 输出: H
// 获取最后一个字符
char lastChar = str.charAt(str.length() - 1);
System.out.println("最后一个字符: " + lastChar); // 输出: o
// 获取中间的字符(例如索引为 2 的字符)
char middleChar = str.charAt(2);
System.out.println("中间字符: " + middleChar); // 输出: l
}
}
注意事项:
charAt(index)的索引从0开始。index超出范围(index < 0或index >= str.length()),会抛出StringIndexOutOfBoundsException异常。
从 String 中提取子串并转换为 char[]
如果你只需要 String 的一部分(子串),可以先提取子串,再转换为 char[]。
示例代码:
public class StringToCharExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 提取子串 "World"
String subStr = str.substring(7, 12); // 索引 7 到 11(不包括 12)
System.out.println("子串: " + subStr); // 输出: World
// 将子串转换为 char[]
char[] subCharArray = subStr.toCharArray();
System.out.println("子串的字符数组: " + java.util.Arrays.toString(subCharArray));
// 输出: [W, o, r, l, d]
}
}
说明:
substring(int beginIndex, int endIndex)提取从beginIndex到endIndex - 1的子串。substring(int beginIndex)提取从beginIndex到末尾的子串。
其他转换方式(不常用)
(1) 使用 String.getChars()
String.getChars() 方法可以提取 String 的一部分到 char[] 数组中。

(图片来源网络,侵删)
示例代码:
public class StringToCharExample {
public static void main(String[] args) {
String str = "Hello, World!";
char[] destArray = new char[5]; // 目标数组
// 从 str 的索引 7 开始,复制 5 个字符到 destArray
str.getChars(7, 12, destArray, 0);
System.out.println("getChars 结果: " + java.util.Arrays.toString(destArray));
// 输出: [W, o, r, l, d]
}
}
说明:
getChars(srcBegin, srcEnd, dst, dstBegin):srcBegin:源字符串的起始索引。srcEnd:源字符串的结束索引(不包括)。dst:目标字符数组。dstBegin:目标数组的起始索引。
常见问题与注意事项
(1) 空字符串()的处理
String是空字符串(),toCharArray()会返回一个长度为0的char[]数组。charAt(0)会抛出StringIndexOutOfBoundsException。
示例代码:
String emptyStr = ""; char[] emptyArray = emptyStr.toCharArray(); // 返回 [] System.out.println(emptyArray.length); // 输出: 0 // emptyStr.charAt(0); // 抛出 StringIndexOutOfBoundsException
(2) null 的处理
String是null,直接调用toCharArray()或charAt()会抛出NullPointerException。
示例代码:
String nullStr = null; // nullStr.toCharArray(); // 抛出 NullPointerException // nullStr.charAt(0); // 抛出 NullPointerException
(3) Unicode 字符的处理
- Java 的
char是 UTF-16 编码,可以表示大部分 Unicode 字符,但有些字符(如emoji)可能需要两个char(代理对)。
示例代码:
String str = "😊"; char[] chars = str.toCharArray(); System.out.println(chars.length); // 输出: 2(因为 😊 是代理对) System.out.println(chars[0]); // 输出: \uD83D System.out.println(chars[1]); // 输出: \xDE0A
| 方法 | 用途 | 示例 | 注意事项 |
|---|---|---|---|
toCharArray() |
将整个 String 转换为 char[] |
char[] arr = str.toCharArray(); |
适用于提取所有字符 |
charAt(index) |
获取指定索引的 char |
char c = str.charAt(0); |
索引越界会抛异常 |
substring() |
提取子串后转换为 char[] |
char[] arr = str.substring(0, 2).toCharArray(); |
需要处理子串范围 |
getChars() |
提取部分字符到 char[] |
str.getChars(0, 5, dest, 0); |
适用于部分复制 |
根据你的需求选择合适的方法:
- 如果需要整个
String的字符数组 →toCharArray()。 - 如果只需要某个字符 →
charAt(index)。 - 如果需要部分字符 →
substring()+toCharArray()或getChars()。

(图片来源网络,侵删)
