2012-04-04 17 views
1

2文字をchar配列の1文字に置き換えるにはどうすればよいですか?もう少し説明しましょう。私は長さがnの文字配列を持っています。この文字列では、指定されたインデックスiの2文字を1文字に置き換えたいと考えています。このプロセスでは配列の長さは1だけ減少します。0からインデックスiiを除く)のすべての要素をコピーしてから挿入します。インデックスiで希望の文字を入力し、インデックス(iを含む)の要素をインデックスn-1にコピーします。しかし、このプロセスはループを2回必要とします。for効率的な方法で同じことをすることができるより良いアプローチはありますか?2文字をchar配列の1文字に置き換える

答えて

5

これを行うより効率的な方法は、char []のラッパーであるStringBuilderを使用して、それをあなたに任せてください。あなたは、それはそれをしない方法を確認するために交換するためのコードを見ることができます

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

プリント

HeLo 

+0

char配列でStringBuilderインスタンスを作成できますか?私は私の手に文字列を持っています。 –

+0

ピーターありがとう。 –

2

新しい配列オブジェクトが必要な場合、各配列要素を1回コピーするよりも速い方法がないため、これ以上の効率的な方法はありません。 System.arraycopy()への2回の呼び出しを使用する場合は、ループを自分で書き込む必要はありません。

新しい配列オブジェクトを必要としない場合は、上位の配列要素を1つだけ下に移動することができます。これにはコピー数の半分だけが含まれますが、その後は追跡する必要があります他の方法で長さの。

+0

わかりました...私は[こちら]それを得る(http://docs.oracle.com/javase/6/docs/api/java/lang/System.html:Basicで書かれ

#arraycopy%28java.lang.Object、%20int、%20java.lang.Object、%20int、%20int%29)ありがとうございました。 –

-1

1つのforループを使用できます。 iteration(i)= indexを置き換えたいのかどうかを示すIF文を入れ、単なるコピーではなく別の操作をします。

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」条件を毎回チェックすることはおそらくそれほど良くないであろう。これの代わりに、インデックス '0'から' i-1'を索引するための2つの 'for'ループ(' System.arraycopy'を意味します)と索引 'i + 1'の索引' n-1'をそれぞれ選ぶべきです。これにより、パフォーマンスが向上する可能性があります。私が間違っていれば私を訂正してください。 –

+0

2行のコードで行うことができるので、ArrayCopyはより優れています。ちょうど単一のループで行うことができることを指摘していました。 – kazmone1

関連する問題