在 Java 中,获取字符串(String)的最后一个字符有多种方法,下面我将为你详细介绍最常用和最推荐的方法,并指出一些需要注意的地方。

(图片来源网络,侵删)
推荐方法:使用 charAt() 和 length()
这是最直接、最常用且性能最好的方法。
语法
char lastChar = myString.charAt(myString.length() - 1);
代码示例
public class Main {
public static void main(String[] args) {
String text = "Hello, World!";
// 1. 获取最后一个字符
if (text != null && !text.isEmpty()) {
char lastChar = text.charAt(text.length() - 1);
System.out.println("字符串是: \"" + text + "\"");
System.out.println("最后一个字符是: " + lastChar); // 输出: !
}
// 2. 处理空字符串的情况
String emptyString = "";
if (emptyString != null && !emptyString.isEmpty()) {
char lastChar = emptyString.charAt(emptyString.length() - 1);
System.out.println("最后一个字符是: " + lastChar);
} else {
System.out.println("字符串为空,无法获取最后一个字符。");
}
}
}
工作原理
myString.length(): 获取字符串的长度(字符数)。"Hello"的长度是 5。myString.length() - 1: 因为字符串的索引是从0开始的,所以最后一个字符的索引是长度 - 1。"Hello"的最后一个字符'o'的索引是4。myString.charAt(index): 根据给定的索引,返回该位置上的字符。
重要注意事项:处理边界情况
如果你尝试对一个空字符串 () 使用 charAt() 方法,程序会抛出 StringIndexOutOfBoundsException 异常。
String emptyString = ""; // 这行代码会抛出异常: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 char c = emptyString.charAt(emptyString.length() - 1); // length() - 1 = -1
在使用 charAt() 之前,必须检查字符串是否为空或为 null。
安全的写法(推荐)
String myString = "some text";
if (myString != null && !myString.isEmpty()) {
char lastChar = myString.charAt(myString.length() - 1);
// ... 安全地使用 lastChar
} else {
// 处理字符串为 null 或为空的情况
System.out.println("字符串无效或为空。");
}
其他方法
虽然 charAt() 是最佳选择,但了解其他方法也有助于你更好地理解 Java。

(图片来源网络,侵删)
方法 2:转换为字符数组 (toCharArray())
你可以先将字符串转换为字符数组,然后取数组的最后一个元素。
String text = "Java";
char[] charArray = text.toCharArray(); // 转换为 ['J', 'a', 'v', 'a']
if (charArray.length > 0) {
char lastChar = charArray[charArray.length - 1];
System.out.println("最后一个字符是: " + lastChar); // 输出: a
}
缺点: 这种方法会创建一个新的字符数组,当字符串很长时,会消耗更多的内存和性能,不如 charAt() 高效。
方法 3:使用 substring() (不推荐)
你可以截取从倒数第二个字符到末尾的子字符串,这个子字符串的长度就是 1。
String text = "Programming";
if (text != null && !text.isEmpty()) {
// substring(开始索引, 结束索引) 是左闭右开的
// 所以要取最后一个字符,开始索引是 length() - 1,结束索引是 length()
String lastCharAsString = text.substring(text.length() - 1);
System.out.println("最后一个字符是: " + lastCharAsString); // 输出: g
// 如果你需要 char 类型
char lastChar = lastCharAsString.charAt(0);
System.out.println("最后一个字符(char)是: " + lastChar);
}
缺点:

(图片来源网络,侵删)
- 同样需要处理空字符串的异常。
- 创建了一个新的
String对象,即使它只包含一个字符,这比直接获取char类型更耗费资源。 - 代码更冗长,可读性稍差。
总结与最佳实践
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
charAt(length() - 1) |
性能最高,代码简洁,直接返回 char |
必须手动处理 null 和空字符串 |
⭐⭐⭐⭐⭐ (首选) |
toCharArray() |
直观,易于理解 | 创建新数组,内存和性能开销大 | ⭐⭐ |
substring() |
逻辑简单 | 性能差,创建新对象,代码冗长 | ⭐ |
最终结论:
在 Java 中获取字符串最后一个字符的最佳实践是:
// 1. 始终检查字符串是否为 null 或空
if (myString != null && !myString.isEmpty()) {
// 2. 使用 charAt() 方法获取最后一个字符
char lastChar = myString.charAt(myString.length() - 1);
// ... 进行后续操作
} 