在 Java 中,获取字符串的最后一个字符有几种常见的方法,最推荐使用 String.charAt() 方法,因为它简单、直接且高效。

使用 charAt() 方法 (最推荐)
这是最直接和最常用的方法。charAt(int index) 方法可以返回字符串中指定索引位置的字符。
关键点:
- Java 字符串的索引从
0开始。 - 最后一个字符的索引是
字符串长度 - 1(即length() - 1)。
示例代码:
public class LastCharacterExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 1. 检查字符串是否为空或为 null,避免异常
if (str != null && !str.isEmpty()) {
// 2. 获取最后一个字符的索引: length() - 1
int lastIndex = str.length() - 1;
// 3. 使用 charAt() 方法获取字符
char lastChar = str.charAt(lastIndex);
System.out.println("原始字符串: " + str);
System.out.println("最后一个字符是: '" + lastChar + "'");
} else {
System.out.println("字符串为空或 null,无法获取最后一个字符。");
}
}
}
输出:

原始字符串: Hello, World!
最后一个字符是: '!'
使用 substring() 方法
你也可以使用 substring() 方法来提取最后一个字符。substring(int beginIndex, int endIndex) 提取从 beginIndex 到 endIndex - 1 的子字符串。
关键点:
- 要获取最后一个字符,
beginIndex应为length() - 1。 endIndex应为length(),因为它是不包含在结果中的。
示例代码:
public class LastCharacterSubstringExample {
public static void main(String[] args) {
String str = "Java";
if (str != null && !str.isEmpty()) {
// 提取从索引 3 到 4 (不包含 4) 的子字符串,即索引 3 的字符
String lastCharStr = str.substring(str.length() - 1, str.length());
// substring() 返回的是一个 String,如果需要 char 类型,可以再调用 charAt()
char lastChar = lastCharStr.charAt(0);
System.out.println("原始字符串: " + str);
System.out.println("最后一个字符是: '" + lastChar + "' (使用 substring 获取)");
} else {
System.out.println("字符串为空或 null,无法获取最后一个字符。");
}
}
}
输出:

原始字符串: Java
最后一个字符是: 'a' (使用 substring 获取)
对比:
charAt()更简洁,直接返回char类型。substring()会创建一个新的String对象,对于只取一个字符来说效率稍低,代码也略显冗长,所以通常不推荐此方法。
转换为字符数组 (不推荐)
你可以先将字符串转换为字符数组 (char[]),然后取数组的最后一个元素。
示例代码:
public class LastCharacterCharArrayExample {
public static void main(String[] args) {
String str = "Programming";
if (str != null && !str.isEmpty()) {
char[] charArray = str.toCharArray();
char lastChar = charArray[charArray.length - 1];
System.out.println("原始字符串: " + str);
System.out.println("最后一个字符是: '" + lastChar + "' (使用字符数组获取)");
} else {
System.out.println("字符串为空或 null,无法获取最后一个字符。");
}
}
}
输出:
原始字符串: Programming
最后一个字符是: 'g' (使用字符数组获取)
为什么不推荐?
- 这种方法需要将整个字符串转换成一个字符数组,会创建一个新的数组对象,消耗更多的内存和时间。
- 对于仅仅获取最后一个字符这个简单任务来说,这是“杀鸡用牛刀”,效率最低。
总结与最佳实践
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
charAt() |
简单、高效、直接,直接返回 char |
需要手动处理 null 和空字符串 |
⭐⭐⭐⭐⭐ (首选) |
substring() |
逻辑清晰 | 会创建新的 String 对象,代码稍显冗长 |
⭐⭐☆☆☆ (不推荐) |
toCharArray() |
思路简单 | 效率低,内存消耗大,代码冗长 | ⭐☆☆☆☆ (不推荐) |
完整的最佳实践代码
public class GetLastChar {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = ""; // 空字符串
String str3 = null; // null 字符串
System.out.println("字符串 '" + str1 + "' 的最后一个字符是: " + getLastChar(str1));
System.out.println("字符串 '" + str2 + "' 的最后一个字符是: " + getLastChar(str2));
System.out.println("字符串 '" + str3 + "' 的最后一个字符是: " + getLastChar(str3));
}
/**
* 安全地获取字符串的最后一个字符
* @param str 输入的字符串
* @return 最后一个字符,如果字符串为 null 或空,则返回 '\0' (空字符)
*/
public static char getLastChar(String str) {
// 使用 Objects.requireNonNullElse 可以更优雅地处理 null
// String safeStr = str != null ? str : "";
String safeStr = java.util.Objects.requireNonNullElse(str, "");
if (!safeStr.isEmpty()) {
return safeStr.charAt(safeStr.length() - 1);
} else {
// 返回一个默认值,比如空字符 '\0',或者抛出自定义异常
return '\0';
}
}
}
输出:
字符串 'Hello' 的最后一个字符是: o
字符串 '' 的最后一个字符是:
字符串 'null' 的最后一个字符是:
核心要点:
- 首选
charAt()。 - 永远不要忘记处理
null和空字符串,否则会抛出StringIndexOutOfBoundsException或NullPointerException。 - 将获取逻辑封装成一个工具方法(如上面的
getLastChar)是一个非常好的编程习惯。
