ブライアンが言ったように、Java の文字列は不変です。これは、 のようなメソッド呼び出しを介して代入できないことを意味しますm2.charAt(j)=' '
。これは、別の方法を使用して、文字がまだ見つかったかどうかを追跡する必要があることを意味します。
あなたはそれを追加することができintersection
、文字をチェックするときに をintersection
使用してそれが含まれていないことを確認しintersection.indexOf(char c)
ます。これが -1 を返す場合、文字列には含まれていません。
編集:
申し訳ありませんが、出力がマルチセットであることを考慮していませんでした。上記は、出力がセットの場合の問題を解決します。
replaceFirst(String searchFor, String replacement)
m2 で使用して削除できます。次のようになります。
for( int i =0; i < m1.length(); i+=2)
{
if(m2.indexOf(m1.charAt(i)) != -1)
{
intersection = intersection + m1.charAt(1) + " ";
m2 = m2.replaceFirst(new String(m1.charAt(i)), "");
}
}
したがって、m1 = '1 1 2 3 5' で m2 = '1 4 2 1' の場合、
最初のパス: '1 4 2 1' で 1 を探します
2 番目のパス: '4 2 1' で 1 を探します
3 番目のパス: '4 2' で 2 を探します
4 番目のパス: '4' で 3 を探します
5 番目のパス: '4' で 5 を探します
「1 1 2」を返す
スペースを考慮して、変数を 2 ずつ増やしていることに注意してください。これは、2 つの文字列が「aaaaa a」の形式で、「a」が 1 文字のみであると仮定した場合のみです。数字または 1 桁以上の長さの文字がある場合は、空白をスキップして、文字単位で調べるのではなく、別の方法で文字列を解釈する必要があります。
これらの仮定を行うことができれば、このループを実行する前に、Stringtrim
メソッドを使用して m1 の末尾と先頭の空白を削除するのが賢明です。m1 = m1.trim()