// would loved to use Integer, but it is immutable...
class Wrapper
{
public Wrapper(int value)
{
this.value = value;
}
public int value;
}
HashMap<String, Wrapper> counts = new HashMap<String, Wrapper>();
Scanner scanner = new Scanner(new File(fileName));
while(scanner.hasNext())
{
String token = scanner.next();
Wrapper count = counts.get(token);
if(count == null)
{
counts.put(token, new Wrapper(1));
}
else
{
++count.value;
}
}
scanner.close();
3条答案
按热度按时间ltqd579y1#
你很接近,但可能会错过中间人(数组)。
你可以使用
HashMap<String, Integer>
存储字符串Map到字符串计数。你需要你的程序做的是:
从文件中读取下一个字符串。
检查您是否存在该字符串
HashMap
:如果它真的存在,就抓住它
Integer
那就是String
从Map中Map到,增加它,然后将它放回Map中。如果不存在,则将
String
在Map上Integer
1.从步骤1开始重复,直到文件被读取。
从
HashMap
并使用Collection<Integer> counts = map.values();
使用流对集合求和int sum = counts.stream().mapToInt(i -> i).sum();
输出的值sum
.我相信你能想出把它转换成代码自己!:)
你可以找到更多关于
HashMap
这里(查看values()
方法),有关Stream
这里,还有更多关于第5步中的代码的信息。ki0zmccv2#
首先从文件中读取整个数据并存储在string对象中,现在使用
java.util.StringTokenizer
类。它将拆分令牌中的所有单词,现在逐个读取所有令牌,并像下面一样检查它,使用单词作为键,使用频率作为值HashMap
```HashMap map=new HashMap();
HashSet set=new HashSet();
StringTokenizer st = new StringTokenizer(strObj);
String s;
while (st.hasMoreTokens()) {
s=st.nextToken();
if(map.containsKey(s))
{
count=(Integer)map.get(s);
count++;
map.put(s,count);
set.add(s);
}
else
{
map.put(s,count);
set.add(s);
}
}
bf1o4zei3#
除了沙拉德的回答:从文件中读取。。。
我稍微改变了sharad的算法,如果hash值已经在Map中,就不必计算两次,使用泛型可以避免强制转换。
如果只需要设置文件中的字符串,可以通过
counts.keySet();
.