2016-03-15 77 views
0

我已經提供了一個應用程序,當給出關鍵字時,例如打印500條最新鳴叫。 「貓」。Java - 鳴叫計數器

我想用一個String.split()用正則表達式分割的鳴叫的所有單詞,然後使用HashMap存儲每個字,並使用循環遞增每個字的整數值,每次它在微博中提到。

回答

0

應該是這樣的:

for (String word : tweetText.split("\\s+")) { 
     wordMap.put(word, wordMap.getOrDefault(word, 0) + 1); 
    } 

wordMap.getOrDefault(word, 0)可能僅利用Java 8中的代碼將您的鳴叫分成單獨的單詞和計算每個鳴叫感謝您的地圖的話。

1

您可以使用Java 8流:

String[] words = tweetText.split(" "); 
Map<String, Integer> wordCount = Arrays.stream(words) 
    .collect(Collectors.toMap(word -> word, word -> 1, Integer::sum)); 

如果你想這樣做的情況下在敏感:

Map<String, Integer> wordCount = Arrays.stream(words) 
    .map(String::toLowerCase) 
    .collect(Collectors.toMap(word -> word, word -> 1, Integer::sum)); 

只查找特定的詞:

Map<String, Integer> wordCount = Arrays.stream(words) 
    .map(String::toLowerCase) 
    .filter(word -> wordsToMatch.contains(word)) 
    .collect(Collectors.toMap(word -> word, word -> 1, Integer::sum)); 

在哪裏wordsToMatch可以是您正在查找的單詞集或單詞列表。

0

我將延伸HashMap<String, Integer>是提供一種使用該值作爲計數器的put(key)

class WordCounter extends HashMap<String, Integer> { 

    public void put(String key) { 
     Integer number = this.get(key); 
     this.put(key, number == null ? 1 : number + 1); 
    } 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     WordCounter wc = new WordCounter(); 
     for(String word : "this is a test and this is too".split(" ")) { 
      wc.put(word); 
     } 
     System.out.println(wc); 
    } 
} 

輸出:

{a=1, test=1, too=1, and=1, this=2, is=2}