2012-04-04 85 views
1

如何用char数组中的一个字符替换两个字符?让我再解释一下。我有一个长度为n的字符数组。在这个char数组中,我想用指定索引i中的一个字符替换两个字符。在这个过程中,阵列长度将减少1.
我想到的想法是,首先创建一个长度为n-1的新char数组,然后将索引0中的所有元素复制到索引ii除外),然后插入在索引i处的所需字符然后将索引i+2(包括i)的元素复制到索引n-1。但是这个过程需要两次for循环。有没有更好的方法可以有效地做到这一点?用char数组中的一个字符替换两个字符

回答

5

或者更有效的做法是使用一个StringBuilder,它是char []的包装,并让它为你做。

char[] chars = "Hello".toCharArray(); 
StringBuilder sb = new StringBuilder(); 
sb.append(chars); 
sb.replace(2, 4, "L"); 
System.out.println(sb); 

打印

HeLo 

你可以看一下的代码代替,看看它是怎么做的。

+0

我可以使用char数组创建StringBuilder实例吗?我手里有char阵列。 – 2012-04-04 20:19:59

+0

谢谢彼得。 – 2012-04-04 20:43:00

2

鉴于您想要一个新的数组对象,没有比复制每个数组元素更快的方法,所以没有比这更有效的方法。如果您对System.arraycopy()使用两个调用,则不必自己编写循环。

如果您不需要新的数组对象,那么您可以将较高编号的数组元素向下移动一个,这只涉及一半的拷贝数,但您需要保持跟踪其他方面的长度。

+0

好了...我知道了[这里](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

-1

它可以使用一个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

检查每次从索引'0'到索引'n-1'的'if'条件可能不会更好。相反,我应该更喜欢两个'for'循环(我的意思是'System.arraycopy')分别从索引'0'到索引'i-1'和索引'i + 1'索引'n-1'。这可能会提高性能。纠正我,如果我错了。 – 2012-04-04 20:21:51

+0

由于可以用两行代码完成,所以ArrayCopy更好。刚才指出​​可以用单一循环完成。 – kazmone1 2012-04-04 21:55:03

相关问题