You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中字符串转char数组时如何保留原数组长度与索引?

解决Java字符串转char数组时保持原数组长度的问题

嘿,我来帮你搞定这个困扰!你遇到的问题根源其实很好理解:

你一开始创建了一个长度为5的chararray,但当你执行chararray = str.toCharArray();时,str.toCharArray()会返回一个新的、长度等于字符串长度(也就是3)的char数组,然后你把这个新数组赋值给了chararray——这就导致你之前创建的长度为5的数组被直接丢弃了,后面循环访问索引3、4的时候自然会触发数组越界异常。

要保持原数组的长度和索引,你需要做的是把字符串的字符复制到你预先创建好的长度为5的数组里,而不是直接替换整个数组。这里有两种简单的实现方式:

方式一:手动循环复制

这种方式直观易懂,适合新手理解:

public static void main(String[] args) {
    String str = "cat";
    char[][] carray = new char[5][5];
    char[] chararray = new char[5]; // 保持这个长度为5的数组不变

    // 把字符串的字符逐个复制到chararray的前几个位置
    for (int i = 0; i < str.length(); i++) {
        chararray[i] = str.charAt(i);
    }

    // 填充二维数组
    for (int i = 0; i < 5; i++) {
        carray[i][0] = chararray[i];
    }

    // 打印验证结果
    for (int i = 0; i < 5; i++) {
        System.out.println("索引" + i + "的值:" + carray[i][0]);
    }
}

方式二:用System.arraycopy高效复制

如果追求效率,Java提供的System.arraycopy()方法会更高效,适合处理更长的字符串:

import java.util.Arrays;

public static void main(String[] args) {
    String str = "cat";
    char[][] carray = new char[5][5];
    char[] chararray = new char[5];

    // 可选:如果不想保留默认的空字符('\u0000'),可以先填充自定义字符(比如空格)
    Arrays.fill(chararray, ' ');

    // 把字符串的char数组复制到我们的长度为5的数组中
    System.arraycopy(str.toCharArray(), 0, chararray, 0, str.length());

    // 填充二维数组并打印
    for (int i = 0; i < 5; i++) {
        carray[i][0] = chararray[i];
        System.out.println("索引" + i + "的值:" + carray[i][0]);
    }
}

这样处理后,chararray始终保持长度为5,字符串的字符会占据前3个索引位置,剩下的索引位置会保留你设置的默认值(要么是char类型的默认空字符,要么是你自定义的空格等字符),完全符合你想要的“保持原数组长度与索引”的需求。

内容的提问来源于stack exchange,提问作者fayez jabra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:52:33