如何用char数组中的一个字符替换两个字符?让我再解释一下。我有一个长度为n
的字符数组。在这个char数组中,我想用指定索引i
中的一个字符替换两个字符。在这个过程中,阵列长度将减少1.
我想到的想法是,首先创建一个长度为n-1
的新char数组,然后将索引0
中的所有元素复制到索引i
(i
除外),然后插入在索引i
处的所需字符然后将索引i+2
(包括i
)的元素复制到索引n-1
。但是这个过程需要两次for
循环。有没有更好的方法可以有效地做到这一点?用char数组中的一个字符替换两个字符
回答
或者更有效的做法是使用一个StringBuilder,它是char []的包装,并让它为你做。
char[] chars = "Hello".toCharArray();
StringBuilder sb = new StringBuilder();
sb.append(chars);
sb.replace(2, 4, "L");
System.out.println(sb);
打印
HeLo
你可以看一下的代码代替,看看它是怎么做的。
使用System.arraycopy()复制数组部分,而不是遍历其元素。
鉴于您想要一个新的数组对象,没有比复制每个数组元素更快的方法,所以没有比这更有效的方法。如果您对System.arraycopy()
使用两个调用,则不必自己编写循环。
如果您不需要新的数组对象,那么您可以将较高编号的数组元素向下移动一个,这只涉及一半的拷贝数,但您需要保持跟踪其他方面的长度。
好了...我知道了[这里](http://docs.oracle.com/javase/6/docs/api/java/lang/System.html #arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int%29)非常感谢。 – 2012-04-04 19:49:32
它可以使用一个for循环。只需在IF语句中指出迭代(i)=要替换的索引,然后执行其他操作而不是仅复制。
Basic编写:
For i = 0 to n - 1
If i = x then
arrayCopy(i) = replaceChars
Else
arrayCopy(i) = arraySource(i)
End If
Next
检查每次从索引'0'到索引'n-1'的'if'条件可能不会更好。相反,我应该更喜欢两个'for'循环(我的意思是'System.arraycopy')分别从索引'0'到索引'i-1'和索引'i + 1'索引'n-1'。这可能会提高性能。纠正我,如果我错了。 – 2012-04-04 20:21:51
由于可以用两行代码完成,所以ArrayCopy更好。刚才指出可以用单一循环完成。 – kazmone1 2012-04-04 21:55:03
- 1. 用两个数组替换字符串中的字符
- 2. 替换字符数组中的char
- 3. 用一个字符替换字符串中的整个字符
- 4. 用一个字符替换字符串中的多个字符
- 5. tr:用两个字符替换一个字符
- 6. C++字符数组查找/替换一个char
- 7. sed - 用另一个字符串替换两个字符串之间的字符
- 8. 用另一个字符串替换字符串中的字符?
- 9. 将char转换为char无效* - 将字符串数组中的char复制到另一个字符串数组
- 10. 用数组中的字符替换字符串中的字符
- 11. perl如何用两个字符替换一个字符的一个发生
- 12. C#用单个字符替换字符串中的一组数字
- 13. (多个)用数组替换字符串
- 14. 替换字符串数组中的最后一个字母Javascript
- 15. 如何用此字符串中的两个不同字符替换第一个和最后一个字符“{0}”
- 16. 将字符替换为字符串中的下一个字符。
- 17. char array替换字符
- 18. 用随机字符替换字符串中的每个数字
- 19. 如何将一个字符串转换为一个字符数组中的字符大小的字符数组?
- 20. 交换字符串单元格数组中的两个字符
- 21. 如何用数组替换字符串中的同一个字符串实例?
- 22. 如何替换JavaScript中的前两个字符的字符串?
- 23. 替换一个字符串。
- 24. 用另一个字符替换任意数量的字符
- 25. 用一个StringBuffer子字符串替换一个子字符串
- 26. 用另一个字符串替换字符串的第一个字符
- 27. 用一个数组替换字符串中的位置
- 28. 用另一个字符替换字符串中的字符并切换回
- 29. 在条件中替换两个字符之间的字符
- 30. 替换列中前两个相似字符的字符串
我可以使用char数组创建StringBuilder实例吗?我手里有char阵列。 – 2012-04-04 20:19:59
谢谢彼得。 – 2012-04-04 20:43:00