杰瑞科技汇

Java中toCharArray()如何使用?

这是一个非常基础且常用的 String 类方法。

核心定义

toCharArray() 是 Java 中 java.lang.String 类的一个公共方法。

方法签名:

public char[] toCharArray()

作用: 将一个字符串对象转换为一个字符数组 (char[]),新创建的数组包含了字符串中的每一个字符,顺序与字符串中的顺序完全一致。

返回值: 一个新分配的字符数组,其长度等于字符串的长度,内容是字符串中每个字符的副本。


使用示例

下面通过几个简单的例子来演示它的用法。

示例 1:基本用法

这是最常见的用法,将一个字符串转换成字符数组,然后遍历打印。

public class ToCharArrayExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 调用 toCharArray() 方法
        char[] charArray = str.toCharArray();
        // 打印数组的长度
        System.out.println("字符串长度: " + str.length()); // 输出: 13
        System.out.println("数组长度: " + charArray.length); // 输出: 13
        // 遍历字符数组
        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.print(c + " ");
        }
    }
}

输出:

字符串长度: 13
数组长度: 13
索引 0: H
索引 1: e
索引 2: l
索引 3: l
索引 4: o
索引 5: ,
索引 6:  
索引 7: W
索引 8: o
索引 9: r
索引 10: l
索引 11: d
索引 12: !
使用增强 for 循环遍历:
H e l l o ,   W o r l d ! 

示例 2:修改字符数组 vs 修改字符串

一个非常重要的特性是:toCharArray() 返回的是原字符串的一个副本,修改这个字符数组不会影响原始的字符串对象。

public class StringImmutabilityExample {
    public static void main(String[] args) {
        String originalStr = "Java";
        System.out.println("原始字符串: " + originalStr);
        // 转换为字符数组
        char[] chars = originalStr.toCharArray();
        // 修改字符数组中的内容
        chars[0] = 'K'; // 将第一个字符 'J' 改为 'K'
        System.out.println("修改后的字符数组: " + new String(chars)); // 输出: Kava
        System.out.println("原始字符串是否改变: " + originalStr);     // 输出: Java (没有改变)
    }
}

输出:

原始字符串: Java
修改后的字符数组: Kava
原始字符串是否改变: Java

这个例子清晰地展示了 Java 中字符串的不可变性 (Immutability)toCharArray() 创建的是副本,保护了原始数据。


示例 3:实际应用场景

toCharArray() 在很多场景下都非常有用。

场景 1:字符级别的处理和统计

统计一个字符串中每个字母出现的次数。

public class CharCountExample {
    public static void main(String[] args) {
        String text = "programming is fun";
        text = text.toLowerCase(); // 转为小写方便统计
        char[] chars = text.toCharArray();
        int[] counts = new int[26]; // 假设只统计 a-z
        for (char c : chars) {
            if (c >= 'a' && c <= 'z') {
                counts[c - 'a']++;
            }
        }
        System.out.println("字母出现次数统计:");
        for (char c = 'a'; c <= 'z'; c++) {
            if (counts[c - 'a'] > 0) {
                System.out.println(c + ": " + counts[c - 'a']);
            }
        }
    }
}

场景 2:反转字符串

虽然 Java 8+ 可以用 StringBuilder.reverse(),但用 toCharArray() 也是一种经典实现方式。

public class ReverseStringExample {
    public static void main(String[] args) {
        String str = "Hello";
        char[] charArray = str.toCharArray();
        int start = 0;
        int end = charArray.length - 1;
        while (start < end) {
            // 交换首尾字符
            char temp = charArray[start];
            charArray[start] = charArray[end];
            charArray[end] = temp;
            start++;
            end--;
        }
        // 将字符数组转换回字符串
        String reversedStr = new String(charArray);
        System.out.println("原始字符串: " + str);
        System.out.println("反转后字符串: " + reversedStr);
    }
}

输出:

原始字符串: Hello
反转后字符串: olleH

getChars() 的比较

String 类还有一个类似的方法 getChars(),它们有什么区别呢?

特性 toCharArray() getChars()
返回值 返回一个全新的 char[] 数组。 无返回值 (void),数据被复制到你提供的 char[] 数组中。
使用方式 简单直接,适合一次性将整个字符串转为数组。 更灵活,可以指定源字符串的起始和结束索引,以及目标数组的起始位置。
灵活性 较低,总是复制整个字符串。 较高,可以复制字符串的任意一部分到目标数组的任意位置。

getChars() 方法签名:

public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
  • srcBegin: 源字符串中要复制的起始索引(包含)。
  • srcEnd: 源字符串中要复制的结束索引(不包含)。
  • dst: 目标字符数组。
  • dstBegin: 目标数组中开始放置的位置。

示例:

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

如何选择?

  • 如果你需要整个字符串的字符数组,使用 toCharArray() 更简洁。
  • 如果你只需要字符串的一部分,或者想将字符复制到一个已经存在的数组中,使用 getChars() 更高效,因为它可以避免创建不必要的数组。

  • 功能: toCharArray() 是 Java String 类的一个方法,用于将字符串内容复制到一个新的字符数组 (char[]) 中。
  • 返回值: 一个新的 char[] 数组。
  • 核心特性: 它返回的是副本,修改返回的数组不会影响原始的字符串,体现了字符串的不可变性。
  • 常用场景: 需要对字符串进行字符级别的操作,如遍历、统计、排序、反转等。
  • getChars() 的区别: toCharArray() 更简单,适合全量复制;getChars() 更灵活,适合部分复制和复用已有数组。
分享:
扫描分享到社交APP
上一篇
下一篇