2014-02-13 36 views
-2

我有一个返回某种字符串的方法。我想将单个词存储在一个HashMap中,它们的发生次数将字符串存储到散列表中

例如,我有一个字符串 - “今天是晴天,今天不会下雨”。现在我的HashMap应该像

{其:2,一:1,阳光明媚:1,天:1,今天:2,不:1,要:1,雨水:1}

我应该如何继续? PS:我知道如何使用HashMaps。在这种情况下,我的问题是我不知道如何解析给定的字符串,并将这些单词与它们的发生次数一起存储。

+0

可以使用字符串作为键,但必须将数字存储为整数对象,而不是“int”值。 “Autoboxing”可能会处理这些数字,但最好明确一下。 –

+0

http://tutorialswithexamples.com/java-map-and-hashmap-tutorial-with-examples/ – phntmasasin

+2

你可以看看谷歌Guava中的Multiset。它基本上是一个专门用于这种情况的地图。 – chrylis

回答

1

尝试这样:

String text = "Its a sunny day today Its not gonna rain today"; 
Map<String,Integer> map = new HashMap<String, Integer>(); 
for(String word : text.split(" ")) { 
    Integer i = map.get(word); 
    if(i == null) { 
     map.put(word, 1); 
    } else { 
     map.put(word, i+1); 
    } 
} 
+0

+1这是标准方法。 – Bohemian

0

这是用匿名类来处理值initializion的变化:

// customized version of Map that doesn't return null from get() 
Map<String, Integer> map = new HashMap<String, Integer>() { 
    @Override 
    public Integer get(Object key) { 
     return containsKey(key) ? super.get(key) : 0; 
    } 
}; 
String s = "Its a sunny day today Its not gonna rain today"; 
for (String word : s.split(" ")) 
    map.put(word, map.get(word) + 1); // use is simple 

输出:

{not=1, Its=2, sunny=1, a=1, today=2, day=1, rain=1, gonna=1} 

这是关于相同数量作为标准方法的线条,但是通过推动首先出现的逻辑来更容易地使用它在地图上放入单词。

您可能希望将输入的情况更改为全部小写,以便“其”和“其”是“相同”的单词。

相关问题