杰瑞科技汇

Java字符串如何高效转为字符数组?

最常用的方法是 charAt(int index),它用于获取字符串中指定位置的单个字符。

Java字符串如何高效转为字符数组?-图1
(图片来源网络,侵删)

如果要将字符串中的所有字符逐一处理,则需要使用 toCharArray() 方法,它会将整个字符串转换为一个 char 数组。


charAt(int index) - 获取指定位置的字符

这是最直接、最常用的方法,当你需要字符串中第 N 个字符时使用它。

语法:

public char charAt(int index)
  • index: 你想要获取的字符的位置(索引),从 0 开始。
  • 返回值: 指定索引位置的 char 值。
  • 注意: index 超出范围(负数或大于等于字符串长度),会抛出 StringIndexOutOfBoundsException 异常。

示例代码:

public class StringToCharExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 获取第一个字符 (索引为 0)
        char firstChar = str.charAt(0);
        System.out.println("第一个字符是: " + firstChar); // 输出: H
        // 获取索引为 7 的字符
        char charAt7 = str.charAt(7);
        System.out.println("索引为 7 的字符是: " + charAt7); // 输出: W
        // 获取最后一个字符
        int lastIndex = str.length() - 1;
        char lastChar = str.charAt(lastIndex);
        System.out.println("最后一个字符是: " + lastChar); // 输出: !
    }
}

异常处理示例:

public class StringToCharExceptionExample {
    public static void main(String[] args) {
        String str = "Java";
        // 正确的索引
        System.out.println(str.charAt(1)); // 输出: a
        try {
            // 错误的索引 (超出范围)
            System.out.println(str.charAt(4)); // 字符串长度为4,最大索引为3
        } catch (StringIndexOutOfBoundsException e) {
            System.err.println("错误: 索引超出范围!");
            e.printStackTrace();
        }
    }
}

toCharArray() - 将整个字符串转换为字符数组

如果你需要处理字符串中的每一个字符,比如遍历、修改或排序,这个方法就非常有用。

Java字符串如何高效转为字符数组?-图2
(图片来源网络,侵删)

语法:

public char[] toCharArray()
  • 返回值: 一个包含字符串中所有字符的 char 数组,数组的长度等于字符串的长度。

示例代码:

public class StringToCharArrayExample {
    public static void main(String[] args) {
        String str = "Java";
        // 将字符串转换为 char 数组
        char[] charArray = str.toCharArray();
        // 打印数组内容
        System.out.println("转换后的 char 数组: " + java.util.Arrays.toString(charArray));
        // 输出: 转换后的 char 数组: [J, a, v, a]
        // 遍历数组中的每一个字符
        System.out.println("\n遍历每个字符:");
        for (int i = 0; i < charArray.length; i++) {
            System.out.println("字符 " + i + ": " + charArray[i]);
        }
        // 使用增强 for 循环 (更简洁)
        System.out.println("\n使用增强 for 循环遍历:");
        for (char c : charArray) {
            System.out.println(c);
        }
        // 修改数组中的字符 (注意:这不会影响原始字符串,因为字符串是不可变的)
        charArray[0] = 'K';
        System.out.println("\n修改数组后的 char 数组: " + java.util.Arrays.toString(charArray));
        System.out.println("原始字符串 str 仍然是: " + str); // 输出: Java
    }
}

总结与对比

特性 charAt(int index) toCharArray()
用途 获取字符串中单个特定位置的字符。 将整个字符串转换为 char 数组,以便批量处理所有字符。
返回值 单个 char 类型。 char[] (字符数组)。
性能 非常高效,直接访问内存中的字符,无需创建新数组。 需要创建一个新的 char 数组并复制所有字符,因此比 charAt 稍慢,内存占用也更高。
异常 如果索引无效,会抛出 StringIndexOutOfBoundsException 不会抛出此类异常(如果字符串为 null 会抛出 NullPointerException)。
使用场景 当你只需要字符串的第 N 个字符时。 当你需要遍历、检查或修改字符串中的所有字符时。

如何选择?

  • 只需要一个字符? -> 使用 str.charAt(index)
  • 需要处理所有字符? -> 使用 str.toCharArray() 然后遍历数组。

补充:Stringchar 的其他情况

问题可能不是指转换,而是指从 String 获取其原始 char 数组,Java 的 String 内部就是用 char[] 存储的,你可以通过反射获取它(但这不推荐,因为它是实现细节,且在不同 Java 版本中可能变化)。

// 不推荐的生产环境代码!仅用于演示内部实现。
String str = "example";
char[] value = (char[]) str.getClass().getDeclaredField("value").get(str);
System.out.println(Arrays.toString(value)); // 输出: [e, x, a, m, p, l, e]

请坚持使用 charAt()toCharArray() 这两种标准 API。

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