5 回答
TA贡献1772条经验 获得超5个赞
我期待 0123 的输出,但是当我运行代码时,它显示原始字符串 xxxx,就好像 for 循环是无用的
在 Java 中,String 对象是不可变的。该replace
方法返回一个新的 String 对象,其中包含您需要的修改。
card = card.replace(card.charAt(i), code[i]);
Ps 另外,你的for
循环没有覆盖数组的最后一个元素。运行它i < code.length
。
TA贡献1934条经验 获得超2个赞
要将 a 转换char[]
为 a String
,请调用String(char[] value)
构造函数:
char[] code = {'0', '1', '2', '3'};
String card = new String(code);
System.out.println(card); // prints: 0123
你的代码永远不会工作,即使你解决了捕获调用结果的问题replace
,如其他答案中所述,因为在第一次迭代时card.charAt(i)
返回一个'x'
,所以replace(card.charAt(i), code[i])
意味着replace('x', '0')
,替换所有X,导致card = "0000"
.
第二次迭代:card = "1111"
第三次迭代:card = "2222"
第四次迭代:card = "3333"
如果要构建字符串,请使用StringBuilder
:
char[] code = {'0', '1', '2', '3'};
StringBuilder buf = new StringBuilder("xxxx");
for (int i = 0; i < code.length; i++)
buf.setCharAt(i, code[i]);
String card = buf.toString();
System.out.println(card); // prints: 0123
或者:
StringBuilder buf = new StringBuilder();
for (int i = 0; i < code.length; i++)
buf.append(code[i]);
TA贡献1786条经验 获得超12个赞
在 Java 中,字符串是不可变的,这意味着您无法更改它们。当您调用它时String.replace()
,它实际上返回一个新字符串,而不是修改您的旧字符串。如果您想要一个内容与数组中的内容类似的字符串,请使用 String 构造函数,card = new String(code)
. 然后 String 将包含数据0123
。
TA贡献1818条经验 获得超11个赞
恕我直言,一种更简单的方法是使用 String 类提供的方法在一个语句中完成。
给出以下内容:
String card = "xxxx";
char[] code = { '0', '1', '2', '3',
};
你可以这样做。
card = String.valueOf(code) + card.substring(code.length);
System.out.println(card); // prints 0123
它的工作方式是。
String.valueOf(code) 将 char 数组转换为 String。
在这种情况下,card.substring(code.length) 获取从 4 开始的其余字符串。
然后将它们连接在一起。
如果你有一个字符串而不是一个字符数组,你可以直接使用它。
如果字符串比代码数组长,此方法还会保留卡中的多余字符。
TA贡献1735条经验 获得超5个赞
你为什么这样做code.length - 1
?我的意思code.length
是实际上是你需要的。长度从 1 in this string: 开始,到 2 in this string :。"a"
"ab"
所以实际上,单个字母的长度code
不是从 0 开始,而是从单个字母的 1 开始。长度实际上code.length
不是 code.length - 1
。
此外,正如其他人指出的那样,字符串在 Java 中是不可变的。这意味着您无法更改它们。当您String.replace()
这样做时,它会返回一个新字符串而不是更改的旧字符串。
所以这是循环中的正确代码for
:
for(int i = 0; i < code.length; i++){ card = card.replace(card.charAt(i), code[i]); }
所以在这种情况下,我改变是card
因为我没有使用这个replace
功能本身,我实际上改变card
了它的替代品。
首先,我所做的是更改card
为card.replace(card.charAt(i), code[i])
. 所以我仍然保留了原始字符串但对其进行了更改,而不是创建新字符串。
添加回答
举报