あなたは.equals()
方法ではなく==
演算子を使用する必要がある文字列を比較します。したがって、if (word == stopwords[i])
をif(word.equals(stopwords[i]))
に変更する必要があります。
長いバージョン:2つの変数が同じオブジェクトを指し示す場合に大別
は、==
オペレータが判断する(我々の場合:word
と同じ文字列オブジェクトでstopwords[i]
点かどうか)。 .equals()
メソッドは、2つのオブジェクトが同一であるかどうかを判断します(内容は賢明です)。 2つの異なるの文字列が同じ内容を保持していたために、プログラムが目的の出力を生成できなかった場合。したがって、==
でそれらを比較するとfalse
が得られますが、.equals()
で比較するとtrueになります。
EDIT
がリンクに掲載のプログラムを読んでたので、私は物事のカップルを発見した:まず、ループの条件のためのインナーはi < stopwords.length
に変更する必要がありました。次に、newWordList
オブジェクトが正しく初期化されませんでした。これは新しいLinkedList<String>(Arrays.asList(parts))
です。つまり、には、値がthe and of the
の1つのString要素が含まれますが、これは必要ではありません。
- 要素0:
the
- 要素1:
and
- 要素2:
of
- 要素3:
the
を次のように
LinkedList
文字列要素を入れたいです
したがって、初期化をnew LinkedList<String>( Arrays.asList(parts.split(" ")))
に変更する必要があります。具体的には、parts.split(" ")
は、指定された文字列(split
)を別々の単語に分解し、これらの単語の配列を返します。
public static void main (String[] args) throws java.lang.Exception
{
String[] stopwords = { "the", "and" };
String parts = "the and of the";
LinkedList<String> newWordList = new LinkedList<String>(
Arrays.asList(parts.split(" ")));
for (Iterator<String> iter = newWordList.iterator(); iter.hasNext();) {
String word = iter.next();
for (int i = 0; i < stopwords.length; i++) {
if (word.equals(stopwords[i])) {
iter.remove();
}
}
}
System.out.println(newWordList.toString());
}
あなたがしたい場合は** '** iterate'を重複して使用' Set'を削除し、 'Iterator'を使用することを除去するが、最初のコメントのためのあなたの操作 – emotionlessbananas
@FlyingZombieのおかげを決定したい場合。私は複製を残したい、これは私が 'Set'を使わない理由です。 –
最初はこの質問は文字列の比較と思われますが、より注意深い検討では、文字列の分割/コレクションの初期化についてもあります。 –