2016-09-17 184 views
-4

我有用戶推文列表(usersTweets),我需要找到包含特定關鍵字(listOfkeyWord)的推文,並將匹配項添加到(includeKeyWord)列表中。Java - 搜索字符串列表if包含另一個字符串列表

String keyWord = "one,two"; 
    List<String> usersTweets = new ArrayList<String>(); 
    usersTweets.add("three nine one two"); 
    usersTweets.add("seven one"); 
    usersTweets.add("three nine ten one"); 
    usersTweets.add("...."); 

    List<String> includeKeyWord = new LinkedList<String>(); 

    if (keyWord.contains(",")) { 
     List<String> listOfkeyWord = new ArrayList<String>(Arrays.asList(keyWord.split(","))); 
     for (String tweet : usersTweets) { 
      if (tweet.contains(listOfkeyWord)) { 
       includeKeyWord.add(tweet); 
      } 
     } 
    } 

注:

如何檢查每鳴叫,只要是含有鍵列表words.In這個例子,我想有(includeKeyWord)只是字符串「三部九一二」,因爲它有詞「一」和「二」。

+3

你還是沒有描述你面臨的問題(問題!=要求)。 – Pshemo

+1

你顯然已經知道如何使用'for'循環,那麼實現邏輯的哪一部分來循環關鍵字會讓你感到困擾? – Andreas

+0

如何檢查每條推文是否包含關鍵詞列表。我只想在(includeKeyWord)中有字符串「three nine one two」,因爲有單詞「one」和「two」 –

回答

0

基本上要檢查是否鳴叫擁有所有的話,那麼就需要通過這些單詞列表進行迭代,並檢查您的tweet擁有所有這些,你可以這樣做:

public boolean hasAllTheWords(String yourString, List<String> words){ 
    for(String word : words) 
    if(!yourString.contains(word)) 
     return false 
    return true; 
} 

現在,而不是tweet.contains(words)你做hasAllTheWords(tweet, words)。您也可以將您的鳴叫轉換成單詞列表,然後你已經將工作(tweet.contains(words)),所以你可以試試這個太:

Arrays.asList(tweet.split(" ")).contains(words)

如果你嘗試這種解決辦法,記得拿護理標點符號(, . ... ! ?等)

0

給你(一個完整的例子):

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.stream.Collectors; 

public class Example { 

    /** 
    * Constructor 
    */ 
    public Example() { 

     //List of usersTweets 
     List<String> usersTweets = new ArrayList<>(); 
     usersTweets.add("three nine one two"); 
     usersTweets.add("seven one"); 
     usersTweets.add("three nine ten one"); 
     usersTweets.add("...."); 

     //The keyWord 
     String keyWord = "one,two"; 


     //make keyWord a List of words 
     List<String> listOfkeyWord = new ArrayList<>(Arrays.asList(keyWord.split(","))); 

     // Filter every word in the list usersTweets 
     //if it contains all the words from listOfKeyWord 
     //then collect all them into a List 
     List<String> includeKeyWord = usersTweets.stream() 
               .filter(tweet -> listOfkeyWord.stream() 
                       .allMatch(tweet::contains)) //word -> tweet.contains(word)) 
               .collect(Collectors.toList()); 
    } 

    public static void main(String[] args) { 
     new Example(); 
    } 
} 
相關問題