为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2023-05-24 14:46:49
我的主要目的是将选项卡中存储的字符存储为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循环没有用一样。
查看完整描述

5 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

我期待 0123 的输出,但是当我运行代码时,它显示原始字符串 xxxx,就好像 for 循环是无用的

在 Java 中,String 对象是不可变的。该replace方法返回一个新的 String 对象,其中包含您需要的修改。

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

Ps 另外,你的for循环没有覆盖数组的最后一个元素。运行它i < code.length


查看完整回答
反对 回复 2023-05-24
?
撒科打诨

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


查看完整回答
反对 回复 2023-05-24
?
开满天机

TA贡献1786条经验 获得超12个赞

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



查看完整回答
反对 回复 2023-05-24
?
慕尼黑8549860

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 开始的其余字符串。

然后将它们连接在一起。

如果你有一个字符串而不是一个字符数组,你可以直接使用它。


如果字符串比代码数组长,此方法还会保留卡中的多余字符。


查看完整回答
反对 回复 2023-05-24
?
喵喔喔

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了它的替代品。

首先,我所做的是更改cardcard.replace(card.charAt(i), code[i]). 所以我仍然保留了原始字符串但对其进行了更改,而不是创建新字符串。


查看完整回答
反对 回复 2023-05-24
  • 5 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信