【问题标题】:String builder replace elements at even indexes in string字符串生成器替换字符串中偶数索引处的元素
【发布时间】:2021-03-03 10:03:12
【问题描述】:

我正在尝试用它们的 ASCII 值替换字符串中的偶数事件。我正在使用 StringBuilder 替换方法,从每次迭代的索引开始,以相同的索引结束,然后将值替换为 ASCII 值。由于某种原因,replace 方法不会用 ASCII 值替换索引处的元素。

sb 是我的 StringBuilder 持有的字符串; result 是我想要的返回字符串。

for (int i =0; i < sb.length(); i=i+2) {
     char c = sb.charAt(i);
     int n = c;
     String a = String.valueOf(n);
     sb.replace(sb.charAt(i), sb.charAt(i), a);
     result = sb.toString();
}

【问题讨论】:

  • 当将替换语句更改为 (i + 1, i + 1, a) 时,字符串输出没有变化...另一方面,当我将语句更改为 (i, i +1,a)结果是字符串中每个元素的变化,而不是偶数发生率。

标签: java string stringbuilder


【解决方案1】:

有些事情我会纠正,但@Nikolai Dmitriev 已经指出了其中一些。

  1. 需要n,尽管@Nikolai Dmitriev 说不需要。因为你想用它的 ASCII 值替换它。但是,您可以将其缩短为 String a = String.valueOf((int) c); 甚至去掉 c 并直接使用 `String a = String.valueOf((int) sb.charAt(i));
  2. 您正在使用sb.replace(char start, char end, String str);,而函数应该接受sb.replace(int start, int end, String str);。要更正此问题,只需使用sb.replace(i, i + 1, a);。请注意,您使用 end = i + 1 是因为 StringBuilder 替换函数的结束值是独占的(不包括)。
  3. 最后初始化result。如果您在 for 循环内部执行该变量,则该变量的范围为 ,并且由于您想返回它,因此您需要在完成替换所有偶数索引后对其进行初始化。

【讨论】:

  • 经过更多测试,上面列出的修复仍然会产生错误的结果。当替换语句设置为 (i, i+1, a) 时,字符串中的每个元素都会被替换,而不是偶数元素。
  • 您必须使用if (i % 2 == 0) 检查它是否是偶数索引,然后在 if 语句中执行操作。 :)
  • 我通过两种方式做到了这一点,一种是将循环迭代增加 2 (i = i + 2),另一种是加入您刚才提到的 if 条件。仍然会产生整个字符串被更改的相同结果,而不是偶数元素:/
  • 好的,我想我知道为什么会这样。第一个已更改,现在第二个字母将位于索引 2,因为 ascii 值的长度为 2。尝试使用字符串作为参考,并首先使用空字符串生成器。循环遍历字符串,而不是stringbuilder,如果索引为奇数则将字符串的字符添加到stringbuilder中,否则添加ascii值
  • 就是这样!感谢所有的帮助!由于多余的数字而导致索引被推送的想法甚至没有在我的脑海中浮现,哈哈:)
猜你喜欢
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2019-01-08
  • 2022-08-14
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多