さて、私はあなたが使用しようとしていたアプローチを見ることができます. まず、「重複を取り除く」というと、隣接する重複だけを取り除くということですか?つまり、「bookkeeper」を「bokeper」に変更したいのですが、「abcabcabc」は変更されません。2番目の「abc」だけを返したい場合は、アプローチ全体が間違っています。
互いに隣り合っている重複だけを削除したいと仮定すると、あなたは正しい軌道に乗っていましたが、間違ったことは次のとおりです。
(1) userKeyword の各文字を見ていくと、次のようになります。
for (lengthCounter=0; lengthCounter<wordLength; lengthCounter++){
if (userKeyword.charAt(lengthCounter) != userKeyword.charAt(lengthCounter + 1)){
あなたがしたように、ループ内で userKeyword を変更すると、めちゃくちゃになります。文字はシフトオーバーしますが、インデックスをインクリメントし続けます。つまり、一部の文字をスキップします。
(2) lengthCounter と lengthCounter+1 の文字を見ているので、文字列の終わりに達したときに注意する必要はありません。この場合、インデックスが最後の文字に到達しないようにします。これは、その後に文字がなく、charAt(lengthCounter + 1) がクラッシュするためです。for
を と言うように変更しますlengthCounter < wordLength-1
。
(3) 最後に、revendedKeyword と userKeyword を 1 文字の文字列に設定しています。
String revisedKeyword = "" + userKeyword.charAt(lengthCounter);
userKeyword = revisedKeyword;
これは確かにあなたが望むものではありません。おそらく、キーワード全体を保持するために新しい文字列を設定する必要があります。このようなもの:これをループの外に置きます
String newKeyword = "";
そして、それに新しいキャラクターを追加するには
newKeyword = newKeyword + userKeyword.charAt(lengthCounter);
ループ内で userKeyword を変更しないでください。最後に、newKeyword が答えになります。
(ループなどの使い方を学ぶ必要があると思います。実際には、正規表現を使用してすべてを1行で実行できると思いますが、それは演習のポイントではありません。)