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
相关产品推荐
相关产品推荐

