charAt() 和 toCharArray()
charAt(int index) - 获取单个字符
这是最常用、最直接的方法,用于获取字符串中指定位置的字符。

语法:
char charAt(int index)
参数:
index: 你想要获取的字符的索引(位置),索引从 0 开始。
返回值:
- 返回指定索引处的
char类型字符。
重要:

- 如果传入的
index超出范围(即index < 0或index >= 字符串长度),Java 会抛出StringIndexOutOfBoundsException异常。
示例代码:
public class StringCharExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 获取第一个字符 (索引为 0)
char firstChar = str.charAt(0);
System.out.println("第一个字符是: " + firstChar); // 输出: H
// 获取索引为 7 的字符
char commaChar = str.charAt(7);
System.out.println("索引 7 的字符是: " + commaChar); // 输出: W (注意,空格也算一个字符)
// 获取最后一个字符
int lastIndex = str.length() - 1;
char lastChar = str.charAt(lastIndex);
System.out.println("最后一个字符是: " + lastChar); // 输出: !
// 错误示例:尝试获取超出范围的字符
try {
char outOfRangeChar = str.charAt(20); // 字符串长度只有 13
System.out.println(outOfRangeChar);
} catch (StringIndexOutOfBoundsException e) {
System.out.println("捕获到异常: " + e.getMessage());
// 输出: 捕获到异常: String index out of range: 20
}
}
}
toCharArray() - 获取字符数组
如果你需要一次性获取字符串中的所有字符,或者需要频繁地访问字符串中的多个字符,将字符串转换为字符数组 (char[]) 会更高效。
语法:
char[] toCharArray()
返回值:

- 返回一个包含该字符串所有字符的
char类型数组。
示例代码:
public class CharArrayExample {
public static void main(String[] args) {
String str = "Java";
// 将字符串转换为字符数组
char[] charArray = str.toCharArray();
System.out.println("原始字符串: " + str);
System.out.println("转换后的字符数组: " + java.util.Arrays.toString(charArray)); // 输出: [J, a, v, a]
// 现在你可以像操作普通数组一样操作这些字符
System.out.println("数组的第一个字符: " + charArray[0]); // 输出: J
// 修改数组中的字符(注意:这不会影响原始字符串,因为字符串是不可变的)
charArray[2] = 'w';
System.out.println("修改后的字符数组: " + java.util.Arrays.toString(charArray)); // 输出: [J, a, w, a]
System.out.println("原始字符串依然不变: " + str); // 输出: Java
}
}
其他相关操作
遍历字符串中的所有字符
你可以结合 for 循环和 charAt() 方法,或者使用增强型 for 循环和 toCharArray() 来遍历字符串。
使用 charAt() 和 for 循环:
String str = "遍历";
System.out.println("使用 charAt() 遍历:");
for (int i = 0; i < str.length(); i++) {
System.out.println("索引 " + i + ": " + str.charAt(i));
}
使用 toCharArray() 和增强型 for 循环:
String str = "遍历";
System.out.println("\n使用 toCharArray() 遍历:");
for (char c : str.toCharArray()) {
System.out.println("字符: " + c);
}
查找字符的位置
如果你想知道某个字符(或子字符串)在字符串中第一次出现的位置,可以使用 indexOf() 方法。
语法:
int indexOf(char ch)
示例:
String str = "hello world";
int position = str.indexOf('o'); // 查找字符 'o' 的位置
System.out.println("字符 'o' 第一次出现的位置是: " + position); // 输出: 4
int positionNotFound = str.indexOf('z');
System.out.println("字符 'z' 的位置是: " + positionNotFound); // 如果找不到,返回 -1
总结与对比
| 方法 | 用途 | 返回类型 | 是否可修改字符串 | 示例 |
|---|---|---|---|---|
charAt(int index) |
获取单个指定索引的字符 | char |
否(字符串不可变) | char c = "abc".charAt(1); // c 是 'b' |
toCharArray() |
将整个字符串转换为字符数组 | char[] |
否(但可以修改返回的数组) | char[] arr = "abc".toCharArray(); |
indexOf(char ch) |
查找字符第一次出现的索引 | int |
否 | int i = "abc".indexOf('b'); // i 是 1 |
最佳实践建议
- 只取一个字符? -> 直接用
charAt(),它最简单、最高效。 - 需要频繁访问或修改多个字符? -> 先用
toCharArray()转换为数组,操作起来更方便,性能也更好。 - 想知道字符在哪? -> 使用
indexOf()。 - 始终记得检查索引范围,避免
StringIndexOutOfBoundsException,一个安全的使用方式是:String str = "some text"; int index = 5; if (index >= 0 && index < str.length()) { char c = str.charAt(index); // ... }
