杰瑞科技汇

Java String如何获取最后一个字符?

在 Java 中,获取字符串 String 的最后一个字符有几种常用方法,下面我将详细介绍这些方法,并提供代码示例和注意事项。

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

使用 charAt() 方法(最常用)

这是最直接、最常用的方法。charAt(int index) 方法可以返回字符串中指定索引位置的字符。

核心思路:

  1. 获取字符串的长度 length()
  2. 字符串的索引从 0 开始,所以最后一个字符的索引是 length() - 1
  3. 使用 charAt(length() - 1) 来获取该字符。

代码示例:

public class LastCharacterExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 1. 检查字符串是否为空或长度为0,避免 StringIndexOutOfBoundsException
        if (str != null && !str.isEmpty()) {
            // 2. 获取最后一个字符
            char lastChar = str.charAt(str.length() - 1);
            System.out.println("原始字符串: " + str);
            System.out.println("最后一个字符是: " + lastChar); // 输出 !
        } else {
            System.out.println("字符串为空或null,无法获取最后一个字符。");
        }
    }
}

优点:

Java String如何获取最后一个字符?-图2
(图片来源网络,侵删)
  • 简单、直观。
  • 性能高,直接通过索引访问。

⚠️ 重要注意事项: 如果字符串为空()或 null,直接调用 str.charAt(str.length() - 1) 会抛出异常:

  • 对于空字符串 :str.length() 是 0,str.charAt(-1) 会抛出 StringIndexOutOfBoundsException
  • 对于 null 字符串:str.length()str.charAt() 都会抛出 NullPointerException

在使用 charAt() 之前,必须检查字符串是否为 nullisEmpty()


使用 substring() 方法

你也可以使用 substring() 方法来截取只包含最后一个字符的子字符串。

核心思路:

Java String如何获取最后一个字符?-图3
(图片来源网络,侵删)
  1. 使用 substring(int beginIndex) 方法,beginIndex 设置为 length() - 1
  2. 这会返回一个从倒数第二个字符(不包含)开始到末尾的子字符串,也就是最后一个字符。
  3. 由于返回的是一个 String,你可能需要调用 .charAt(0) 来获取 char 类型。

代码示例:

public class LastCharacterSubstringExample {
    public static void main(String[] args) {
        String str = "Java Programming";
        if (str != null && !str.isEmpty()) {
            // 获取只包含最后一个字符的子字符串
            String lastCharAsString = str.substring(str.length() - 1);
            System.out.println("原始字符串: " + str);
            System.out.println("最后一个字符的子字符串: " + lastCharAsString); // 输出 g
            // 如果需要 char 类型
            char lastChar = lastCharAsString.charAt(0);
            System.out.println("最后一个字符是: " + lastChar);
        } else {
            System.out.println("字符串为空或null,无法获取最后一个字符。");
        }
    }
}

优点:

  • 逻辑清晰,明确表达了“获取最后一个字符”的意图。

缺点:

  • 创建了一个新的 String 对象,比 charAt() 方法有轻微的性能开销。
  • 同样需要处理 null 和空字符串的情况。

转换为字符数组(不推荐)

你可以先将字符串转换为字符数组,然后取数组的最后一个元素。

核心思路:

  1. 调用 toCharArray() 将字符串转为 char[] 数组。
  2. 获取数组的长度 array.length
  3. 取最后一个元素 array[array.length - 1]

代码示例:

public class LastCharacterArrayExample {
    public static void main(String[] args) {
        String str = "test";
        if (str != null && !str.isEmpty()) {
            char[] charArray = str.toCharArray();
            char lastChar = charArray[charArray.length - 1];
            System.out.println("原始字符串: " + str);
            System.out.println("最后一个字符是: " + lastChar); // 输出 t
        } else {
            System.out.println("字符串为空或null,无法获取最后一个字符。");
        }
    }
}

缺点:

  • 性能最差toCharArray() 方法会创建一个新的字符数组,会消耗额外的内存和时间。
  • 代码相对冗长。
  • 同样需要处理 null 和空字符串的情况。

除非你有特殊需求(例如需要频繁操作字符串中的字符),否则不推荐使用此方法。


总结与最佳实践

方法 优点 缺点 推荐度
charAt() 性能最高,代码简洁 需要手动处理 null 和空字符串异常 ⭐⭐⭐⭐⭐ (首选)
substring() 可读性好,意图明确 有轻微性能开销(创建新String) ⭐⭐⭐⭐
toCharArray() 逻辑直接 性能差,内存消耗大 ⭐☆☆☆☆ (不推荐)

最佳实践代码

在实际开发中,一个健壮的函数应该封装好这个逻辑,处理所有边界情况。

public class StringUtils {
    /**
     * 安全地获取字符串的最后一个字符。
     * @param str 输入字符串
     * @return 如果字符串为null或空,则返回'\0'(空字符);否则返回最后一个字符。
     */
    public static char getLastCharSafely(String str) {
        if (str == null || str.isEmpty()) {
            return '\0'; // 返回一个默认值,表示没有字符
        }
        return str.charAt(str.length() - 1);
    }
    public static void main(String[] args) {
        String test1 = "Hello";
        String test2 = "";
        String test3 = null;
        String test4 = "A";
        System.out.println("getLastCharSafely(\"" + test1 + "\"): " + getLastCharSafely(test1)); // o
        System.out.println("getLastCharSafely(\"" + test2 + "\"): " + getLastCharSafely(test2)); // (空字符)
        System.out.println("getLastCharSafely(" + test3 + "): " + getLastCharSafely(test3));    // (空字符)
        System.out.println("getLastCharSafely(\"" + test4 + "\"): " + getLastCharSafely(test4)); // A
    }
}

进阶:Java 8+ 的 Optional (更现代的方式)

如果你使用的是 Java 8 或更高版本,可以利用 Optional 来更优雅地处理可能为 null 的情况,避免使用像 '\0' 这样的魔法值。

import java.util.Optional;
public class LastCharOptionalExample {
    public static void main(String[] args) {
        String str = "Hello, Java 8!";
        // 使用 Optional 避免空指针和空字符串
        Optional<Character> lastCharOpt = Optional.ofNullable(str)
                .filter(s -> !s.isEmpty()) // 过滤掉空字符串
                .map(s -> s.charAt(s.length() - 1));
        // 如果存在字符,则执行操作
        lastCharOpt.ifPresent(c -> {
            System.out.println("原始字符串: " + str);
            System.out.println("最后一个字符是: " + c);
        });
        // 如果不存在(字符串为null或空),则执行此操作
        if (lastCharOpt.isEmpty()) {
            System.out.println("字符串为空或null,没有最后一个字符。");
        }
    }
}

这种方式在函数式编程风格中非常流行,它将“可能存在也可能不存在”的值显式地表达出来,使代码更安全、更易于理解。

分享:
扫描分享到社交APP
上一篇
下一篇