杰瑞科技汇

Java如何高效取字符串最后一个字符?

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

Java如何高效取字符串最后一个字符?-图1
(图片来源网络,侵删)

使用 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,无法获取最后一个字符。");
        }
    }
}

输出:

Java如何高效取字符串最后一个字符?-图2
(图片来源网络,侵删)
原始字符串: Hello, World!
最后一个字符是: '!'

使用 substring() 方法

你也可以使用 substring() 方法来提取最后一个字符。substring(int beginIndex, int endIndex) 提取从 beginIndexendIndex - 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如何高效取字符串最后一个字符?-图3
(图片来源网络,侵删)
原始字符串: 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' 的最后一个字符是:

核心要点:

  1. 首选 charAt()
  2. 永远不要忘记处理 null 和空字符串,否则会抛出 StringIndexOutOfBoundsExceptionNullPointerException
  3. 将获取逻辑封装成一个工具方法(如上面的 getLastChar)是一个非常好的编程习惯。
分享:
扫描分享到社交APP
上一篇
下一篇