2016-12-29 6 views
-1

LinkedListからいくつかの単語を削除しようとしています。 [of]しかし、私は取得しています:
String[] stopwords = {"the","and"};
nwl = LinkedList<String>(Arrays.asList(input));
String input = "the and of the "
私が得ることを期待結果は次のとおりです。[the, end, of, the]これは、私がテストのために使用されるデータです。LinkedListを繰り返して、特定の単語をJavaで削除する方法

for (Iterator<String> iter = nwl.iterator(); iter.hasNext();) { 
    String word = iter.next(); 
    for (int i = 0; i < nwl.size(); i++){ 
     if(word == stopwords[i]) { 
     iter.remove(); 
     } 
    } 
} 
+0

あなたがしたい場合は** '** iterate'を重複して使用' Set'を削除し、 'Iterator'を使用することを除去するが、最初のコメントのためのあなたの操作 – emotionlessbananas

+0

@FlyingZombieのおかげを決定したい場合。私は複製を残したい、これは私が 'Set'を使わない理由です。 –

+0

最初はこの質問は文字列の比較と思われますが、より注意深い検討では、文字列の分割/コレクションの初期化についてもあります。 –

答えて

0

あなたは.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()); 
} 
+0

あなたの答えをありがとう、提案した変更を加えたが、私はまだ同じ出力を得ている。おそらく 'for'ループにいくつか間違いがありますか?次のリンクには、テストプログラム[link](https://ideone.com/5tpR3d)が含まれています。 –

+0

私の答えに返信... –

+0

完了しました。見てください –