java中存在与toCharArray
的混淆。在我编写此代码时,我注意到在此行ch = str.toCharArray();
char数组已经调整大小之后。
public static void main(String[] args){
String str = "helo java";
char[] ch = new char[str.length() + 1];
ch = str.toCharArray();
ch[str.length()] = '\uFDD0';
for(int i = 0; ch[i] != '\uFFD0'; i++){
System.out.print(ch[i]);
}
}
所以我的问题是这个函数重新调整数组的大小? 对不起,我的英语不好。谢谢
答案 0 :(得分:2)
toCharArray()
方法返回新的char数组,因此您之前的原始char数组丢失了
累计到String#toCharArray
返回一个新分配的字符数组,其长度为该字符串的长度,其内容初始化为包含此字符串表示的字符序列。
答案 1 :(得分:1)
.toCharArray()
分配一个 new 字符数组,这意味着你在这里丢失原始数组。
请改为:
final CharBuffer charbuf = CharBuffer.allocate(str.length() + 1);
// String implements CharSequence, so this works
charbuf.append(str).append('\uffd0');
// charbuf.array() contains the underlying char array
答案 2 :(得分:0)
toCharArray
不会调整char数组的大小。
char[] ch = new char[str.length() + 1];
创建一个长度为10的新数组.str.length()为9。
行ch = str.toCharArray();
指定ch引用str.toCharArray()返回的新数组;所以现在ch
引用了一个大小为9的数组。
现在ch[str.length()]
将导致异常。
答案 3 :(得分:0)
char[] ch
是对字符数组的引用,您可以将ch分配给不同的数组,例如:
char[] a = new char[1];
char[] b = new char[2];
char[] ch;
ch = a; // here ch is pointing to the same array as a, so it's length is 1.
ch = a; // here ch is pointing to the same array as b, so it's length is 2.
所以你可以像这样编码你想要的东西(当然有很多可能的实现):
public static void main(String[] args) {
String str = "hello java";
char[] ch = str.toCharArray();
ch = Arrays.copyOf(ch, ch.length+1);
ch[ch.length-1] = '\uFDD0';
for (int i = 0; i< ch.length; i++) {
System.out.print(ch[i]);
}
}
如您所见,您可以使用Arrays.copyOf()
将数组的副本重新调整为新长度,然后在那里引入新角色。
请注意您在停止条件下使用ch[i] != '\uFFD0'
进行迭代,这在Java中是不正确的,因为您要比较指针,而是使用!(ch[i].equals('\uFDD0')