在 Java 中,获取字符串(String)的最后一个字符有几种常见的方法,最核心和推荐的方法是使用 charAt() 和 length() 的组合。

下面我将详细介绍最常用的方法,并提供其他方法的示例和对比。
使用 charAt() 和 length() (最常用)
这是最直接、最常用且性能最高的方法。
原理:
str.length()返回字符串的长度(字符个数)。- Java 中的字符串索引(index)是从
0开始的,最后一个字符的索引是长度 - 1。 str.charAt(index)方法根据给定的索引返回对应的字符。
示例代码:

public class LastCharExample {
public static void main(String[] args) {
String str1 = "Hello, World!";
String str2 = "Java";
String str3 = "A"; // 只有一个字符
String str4 = ""; // 空字符串
// --- 获取最后一个字符 ---
// 检查字符串是否为空,避免 StringIndexOutOfBoundsException 异常
if (!str1.isEmpty()) {
char lastChar1 = str1.charAt(str1.length() - 1);
System.out.println("字符串: \"" + str1 + "\"");
System.out.println("最后一个字符: " + lastChar1); // 输出: !
System.out.println("--------------------");
}
if (!str2.isEmpty()) {
char lastChar2 = str2.charAt(str2.length() - 1);
System.out.println("字符串: \"" + str2 + "\"");
System.out.println("最后一个字符: " + lastChar2); // 输出: a
System.out.println("--------------------");
}
if (!str3.isEmpty()) {
char lastChar3 = str3.charAt(str3.length() - 1);
System.out.println("字符串: \"" + str3 + "\"");
System.out.println("最后一个字符: " + lastChar3); // 输出: A
System.out.println("--------------------");
}
// --- 处理空字符串 ---
if (str4.isEmpty()) {
System.out.println("字符串: \"" + str4 + "\"");
System.out.println("字符串为空,无法获取最后一个字符。");
}
}
}
⚠️ 重要:异常处理
如果对一个空字符串 () 使用 str.charAt(str.length() - 1),str.length() 是 0,0 - 1 = -1。charAt(-1) 会抛出 StringIndexOutOfBoundsException 异常,在使用此方法前,必须检查字符串是否为空。
使用 substring() 和 length()
这种方法也可以实现,但通常不如 charAt() 高效,因为它会创建一个新的子字符串,而 charAt() 只返回单个字符。
原理:
str.substring(beginIndex, endIndex)提取一个从beginIndex(包含) 到endIndex(不包含) 的子字符串。- 要获取最后一个字符,
beginIndex应该是length() - 1,endIndex应该是length()。
示例代码:

public class LastCharSubstringExample {
public static void main(String[] args) {
String str = "Programming";
if (!str.isEmpty()) {
// substring(str.length() - 1, str.length()) 会提取最后一个字符
String lastCharAsString = str.substring(str.length() - 1, str.length());
System.out.println("最后一个字符 (作为字符串): " + lastCharAsString); // 输出: g
// 如果你需要 char 类型,可以再调用 charAt(0)
char lastChar = lastCharAsString.charAt(0);
System.out.println("最后一个字符 (作为char): " + lastChar);
}
}
}
缺点:
- 效率较低:创建了一个新的
String对象,而charAt()不需要。 - 代码稍显冗长。
使用 Java 8+ 的 Stream API (功能强大但过于复杂)
对于这个特定任务,使用 Stream API 是“杀鸡用牛刀”,但如果你需要对字符串中的所有字符进行更复杂的操作,它就非常有用。
原理:
str.chars()将字符串转换为IntStream(一个int值的流,每个int代表一个字符的 Unicode 值)。toArray()将流转换为数组。array[array.length - 1]获取数组的最后一个元素。(char)将int类型的 Unicode 值强制转换为char类型。
示例代码:
import java.util.Arrays;
public class LastCharStreamExample {
public static void main(String[] args) {
String str = "Stream";
if (!str.isEmpty()) {
// 将字符串转为字符数组,然后取最后一个
char lastChar = (char) Arrays.stream(str.toCharArray())
.toArray()[str.length() - 1];
System.out.println("最后一个字符: " + lastChar); // 输出: m
}
}
}
缺点:
- 代码非常冗长和复杂,可读性差。
- 性能远低于
charAt()。
总结与最佳实践
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
charAt(length() - 1) |
代码简洁、性能最高、意图明确 | 需要手动处理空字符串 | ⭐⭐⭐⭐⭐ (强烈推荐) |
substring(length() - 1, length()) |
逻辑清晰 | 效率较低,会创建新对象 | ⭐⭐ |
| Stream API | 功能强大,适合复杂操作 | 过于复杂,性能差,可读性低 | ⭐ |
在 Java 中获取字符串的最后一个字符,首选且最佳的方法是 charAt()。
完整的、健壮的代码模式应该是:
String myString = "some text";
if (myString != null && !myString.isEmpty()) {
char lastChar = myString.charAt(myString.length() - 1);
// 在这里使用 lastChar
System.out.println("最后一个字符是: " + lastChar);
} else {
// 处理字符串为 null 或为空的情况
System.out.println("字符串为空或null,无法获取字符。");
} 