1

char配列で2文字を1文字に置き換える方法は?もう少し説明させてください。長さのchar配列がありnます。このchar配列では、指定されたインデックスで2文字を1文字に置き換えたいと思いますi。このプロセスでは、配列の長さが1減少します。
私が思いついたのは、最初に長さの新しいchar配列を作成し、n-1次にすべての要素をインデックス0からインデックスii除外)にコピーしてから、インデックスに目的の文字を挿入してからiコピーすることです。インデックスi+2i含む)からインデックスまでの要素n-1。ただし、このプロセスには2回のforループが必要です。同じことを効率的に行うことができるより良いアプローチはありますか?

4

4 に答える 4

5

または、これを行うためのより効率的な方法は、char []のラッパーであるStringBuilderを使用して、それを実行させることです。

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

プリント

HeLo

replaceのコードを見て、それがどのように行われるかを確認できます。

于 2012-04-04T19:46:34.503 に答える
4

要素を反復処理する代わりに、System.arraycopy()を使用して配列部分をコピーします。

于 2012-04-04T19:45:55.377 に答える
2

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

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

于 2012-04-04T19:46:13.143 に答える
-1

単一のforループを使用できます。反復(i)=置換するインデックスかどうかを示すIFステートメントを入力するだけで、コピーするだけでなく、別の操作を実行できます。

基本的に書かれています:

For i = 0 to n - 1
       If i = x then
             arrayCopy(i) = replaceChars
       Else
             arrayCopy(i) = arraySource(i)
       End If
Next
于 2012-04-04T19:50:20.647 に答える