是的,我知道 Java 的字符串是不可变的,但仅凭这一点并不能解释为什么这对我不起作用...
当我尝试将字符串数组 (String[]
) 转换为以下形式的一个字符串时遇到了这个问题:('String[0]','String[1]' ,...,'字符串[n]')
。
例如,给定以下数组:
String[] array=new String[3];
array[0]="Jake";
array[1]="Mishel";
array[2]="Dan";
我想创建字符串:('Jake','Mishel','Dan')
但是,如何做到这一点并不是这篇文章的目的...
我想知道的是,为什么这样做有效:
String[] array=new String[3];
array[0]="Jake";
array[1]="Mishel";
array[2]="Dan";
for (int i=0; i<array.length; i++) {
array[i]=array[i]+"'";
array[i]="'"+array[i];
}
String str=Arrays.toString(array);
str=str.replace('[','(');
str=str.replace(']',')');
System.out.println(str); //produces ('Jake','Mishel','Dan'), as desired
但这不是:
String[] array=new String[3];
array[0]="Jake";
array[1]="Mishel";
array[2]="Dan";
for (String str: array) {
str=str+"'";
str="'"+str;
}
String str=Arrays.toString(array);
str=str.replace('[','(');
str=str.replace(']',')');
System.out.println(str); //produces wrong output: (Jake,Mishel,Dan)
?
最佳答案
它不起作用,因为在第二个中,您从数组中的每个索引中提取字符串的值作为 str
,然后对 str
进行更改code>,而不是数组中的字符串(技术上没有变化,替换会是一个更好的词)。在第一个中,您用新值重写数组的索引。
实际上,在 for each 循环中,您使用的是与全局变量具有相同值的局部变量。但是,这是一个新变量,因此它在循环之外没有作用域。在常规的 for 循环中,您显式更新位于数组每个索引处的项目。
关于Java 的字符串连接在 'for' 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293961/