有没有办法通过选项卡中的字符一个一个地更改字符串的字符?

我的主要目的是将选项卡中存储的字符存储为String相同长度的字符。


所以我尝试的是使用循环和方法String用选项卡中相同位置的字符替换 I 在开头声明的每个字符。forreplace(oldChar, newChar)


public static void main(String[] args) {

  String card = "xxxx";

  char[] code = {'0', '1', '2', '3',};


  for (int i = 0; i < code.length-1; i++) {

    card.replace(card.charAt(i), code[i]);

  }

  System.out.println(card);

}

我期望 的输出0123,但是当我运行代码时,它显示原始字符串值 ( xxxx),就好像for循环没有用一样。


呼如林
浏览 182回答 5
5回答

月关宝盒

我期待 0123 的输出,但是当我运行代码时,它显示原始字符串 xxxx,就好像 for 循环是无用的在 Java 中,String 对象是不可变的。该replace方法返回一个新的 String 对象,其中包含您需要的修改。card = card.replace(card.charAt(i), code[i]);Ps 另外,你的for循环没有覆盖数组的最后一个元素。运行它i < code.length。

撒科打诨

要将 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]);

开满天机

在 Java 中,字符串是不可变的,这意味着您无法更改它们。当您调用它时String.replace(),它实际上返回一个新字符串,而不是修改您的旧字符串。如果您想要一个内容与数组中的内容类似的字符串,请使用 String 构造函数,card = new String(code).&nbsp;然后 String 将包含数据0123。

慕尼黑8549860

恕我直言,一种更简单的方法是使用 String 类提供的方法在一个语句中完成。给出以下内容:&nbsp; &nbsp; &nbsp; String card = "xxxx";&nbsp; &nbsp; &nbsp; char[] code = { '0', '1', '2', '3',&nbsp; &nbsp; &nbsp; };你可以这样做。&nbsp; &nbsp; &nbsp; card = String.valueOf(code) + card.substring(code.length);&nbsp; &nbsp; &nbsp; System.out.println(card);&nbsp; // prints 0123它的工作方式是。String.valueOf(code) 将 char 数组转换为 String。在这种情况下,card.substring(code.length) 获取从 4 开始的其余字符串。然后将它们连接在一起。如果你有一个字符串而不是一个字符数组,你可以直接使用它。如果字符串比代码数组长,此方法还会保留卡中的多余字符。

喵喔喔

你为什么这样做code.length - 1?我的意思code.length是实际上是你需要的。长度从 1 in this string: 开始,到 2 in this string&nbsp;:。"a""ab"所以实际上,单个字母的长度code不是从 0 开始,而是从单个字母的 1 开始。长度实际上code.length&nbsp;不是&nbsp;code.length - 1。此外,正如其他人指出的那样,字符串在 Java 中是不可变的。这意味着您无法更改它们。当您String.replace()这样做时,它会返回一个新字符串而不是更改的旧字符串。所以这是循环中的正确代码for:for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;code.length;&nbsp;i++){ &nbsp;&nbsp;card&nbsp;=&nbsp;card.replace(card.charAt(i),&nbsp;code[i]); }所以在这种情况下,我改变是card因为我没有使用这个replace功能本身,我实际上改变card了它的替代品。首先,我所做的是更改card为card.replace(card.charAt(i), code[i]).&nbsp;所以我仍然保留了原始字符串但对其进行了更改,而不是创建新字符串。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java