我有一个返回某种字符串的方法。我想将单个词存储在一个HashMap中,它们的发生次数?将字符串存储到散列表中
例如,我有一个字符串 - “今天是晴天,今天不会下雨”。现在我的HashMap应该像
{其:2,一:1,阳光明媚:1,天:1,今天:2,不:1,要:1,雨水:1}
我应该如何继续? PS:我知道如何使用HashMaps。在这种情况下,我的问题是我不知道如何解析给定的字符串,并将这些单词与它们的发生次数一起存储。
我有一个返回某种字符串的方法。我想将单个词存储在一个HashMap中,它们的发生次数?将字符串存储到散列表中
例如,我有一个字符串 - “今天是晴天,今天不会下雨”。现在我的HashMap应该像
{其:2,一:1,阳光明媚:1,天:1,今天:2,不:1,要:1,雨水:1}
我应该如何继续? PS:我知道如何使用HashMaps。在这种情况下,我的问题是我不知道如何解析给定的字符串,并将这些单词与它们的发生次数一起存储。
尝试这样:
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);
}
}
+1这是标准方法。 – Bohemian
这是用匿名类来处理值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}
这是关于相同数量作为标准方法的线条,但是通过推动首先出现的逻辑来更容易地使用它在地图上放入单词。
您可能希望将输入的情况更改为全部小写,以便“其”和“其”是“相同”的单词。
可以使用字符串作为键,但必须将数字存储为整数对象,而不是“int”值。 “Autoboxing”可能会处理这些数字,但最好明确一下。 –
http://tutorialswithexamples.com/java-map-and-hashmap-tutorial-with-examples/ – phntmasasin
你可以看看谷歌Guava中的Multiset。它基本上是一个专门用于这种情况的地图。 – chrylis