杰瑞科技汇

Java中String如何转char数组?

核心方法:toCharArray()

这是将 String 转换为 char 数组最标准、最推荐的方法。

Java中String如何转char数组?-图1
(图片来源网络,侵删)

语法

public char[] toCharArray()

功能

该方法会创建一个新的 char 数组,然后将调用该方法的 String 对象中的所有字符(包括空格)按顺序复制到这个新数组中,并返回该数组。

示例代码

public class StringToCharArrayExample {
    public static void main(String[] args) {
        // 1. 定义一个字符串
        String str = "Hello, Java!";
        // 2. 使用 toCharArray() 方法将字符串转换为 char 数组
        char[] charArray = str.toCharArray();
        // 3. 打印转换后的数组
        System.out.println("原始字符串: " + str);
        System.out.println("转换后的 char 数组: " + java.util.Arrays.toString(charArray));
        // 4. 遍历 char 数组并打印每个字符
        System.out.println("\n遍历数组中的每个字符:");
        for (char c : charArray) {
            System.out.print(c + " ");
        }
    }
}

输出结果

原始字符串: Hello, Java!
转换后的 char 数组: [H, e, l, l, o, ,,  , J, a, v, a, !]
遍历数组中的每个字符:
H e l l o ,   J a v a ! 

重要注意事项

返回的是新数组,而不是视图

toCharArray() 方法总是创建一个新的 char 数组,而不是返回对字符串内部字符数组的引用,这意味着你可以安全地修改返回的数组,而不会影响原始的 String 对象。

示例:

public class ImportantNoteExample {
    public static void main(String[] args) {
        String originalStr = "immutable";
        System.out.println("原始字符串: " + originalStr);
        // 转换为 char 数组
        char[] chars = originalStr.toCharArray();
        // 修改 char 数组中的第一个字符
        chars[0] = 'I'; // 将 'i' 改为 'I'
        System.out.println("修改后的 char 数组: " + new String(chars)); // 将 char 数组变回字符串
        System.out.println("原始字符串是否改变: " + originalStr); // 原始字符串保持不变
    }
}

输出结果:

Java中String如何转char数组?-图2
(图片来源网络,侵删)
原始字符串: immutable
修改后的 char 数组: Immutable
原始字符串是否改变: immutable

正如你所见,修改 chars 数组并不会影响 originalStr,这证明了 String 对象的不可变性

性能考虑

对于非常大的字符串,频繁调用 toCharArray() 会因为不断创建新数组而消耗较多内存,在性能极其敏感的场景下,如果你只需要读取字符而不需要修改,可以考虑使用 String.charAt(int index) 方法来逐个访问字符,这样可以避免创建额外的数组。

示例(不推荐用于简单转换,仅作性能对比):

String str = "a very long string...";
// 这种方式没有创建新数组,但代码更繁琐
for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    // ... do something with c
}

其他相关方法(不直接用于转换)

虽然 toCharArray() 是最直接的方法,但了解其他方法也很有帮助,因为它们在某些特定场景下会用到。

Java中String如何转char数组?-图3
(图片来源网络,侵删)

getChars()

如果你只想转换字符串的一部分(一个子串)到 char 数组,getChars() 是一个很好的选择。

语法:

public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
  • srcBegin: 要复制的第一个字符的索引。
  • srcEnd: 要复制的最后一个字符的索引(不包括这个索引)。
  • dst: 目标 char 数组。
  • dstBegin: 目标数组中开始放置字符的位置。

示例:

public class GetCharsExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        char[] destination = new char[5]; // 创建一个长度为5的目标数组
        // 将 str 中索引 7 到 12 (不包括12) 的字符复制到 destination 数组的开始位置 (0)
        str.getChars(7, 12, destination, 0);
        System.out.println("目标数组内容: " + new String(destination)); // 输出 "World"
    }
}

使用 StringBufferStringBuilder

StringBufferStringBuilder 有一个构造函数可以直接接受一个 String,然后通过 toString() 方法可以变回字符串,虽然这不是直接转换,但它们内部都维护着一个 char 数组,可以间接获取。

示例:

public class StringBuilderExample {
    public static void main(String[] args) {
        String str = "Java";
        // 使用 StringBuilder 构造函数
        StringBuilder sb = new StringBuilder(str);
        // 获取其内部的 char 数组(通过反射或查看源码可知,但这不是公共API)
        // 注意:直接访问 sb.value 是不推荐的,因为它不是公共API,未来可能改变。
        // 这里仅作概念演示。
        // char[] internalCharArray = sb.value; // 在某些JDK版本中可能可以访问,但不要在生产代码中这样做
        // 更安全的方式是先转为 String 再用 toCharArray()
        char[] safeCharArray = sb.toString().toCharArray();
        System.out.println("通过 StringBuilder 转换的数组: " + java.util.Arrays.toString(safeCharArray));
    }
}

这种方法绕了远路,不如直接用 toCharArray() 高效和清晰。


方法 描述 优点 缺点 适用场景
toCharArray() 将整个字符串转换为新的 char 数组 最简单、最直接、最常用 为大字符串创建新数组有内存开销 绝大多数情况下的首选
getChars() 将字符串的子串复制到已存在的 char 数组 灵活,可以处理部分内容 需要预先创建目标数组 只需要字符串的一部分时
charAt() 逐个访问字符串中的字符 不创建新数组,节省内存 代码繁琐,效率低于数组遍历 只需读取字符且对性能要求极高时

在 Java 中,如果你需要将 String 转换为 char 数组,请毫不犹豫地使用 toCharArray() 方法,它是最符合 Java 设计思想、最清晰、最可靠的方式。

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