我有一个大文本文件,我已经处理成单个单词(在我的程序中称为标记)。我需要获取这些标记并将它们添加到地图中,该地图具有单词长度的键和出现次数的值。例如,(hi,to,say)的列表将给出(2:2,3:1)。忽略1或任何其他键的键,因为没有它们的情况。
会是这样的:
private Map<Integer, Integer> tokenSizes = new HashMap<Integer, Integer>;
public void processToken(String token)
{
Integer value = tokenSizes.get(token);
tokenSizes.put(token.length(), (value == null) ? 1 : value + 1);
}
工作?
答案 0 :(得分:0)
在您的示例代码中,您试图获取与令牌String匹配的键,这是原始单词,而不是您想要的。您首先要获取String标记的长度,如果它作为Map
中的密钥存在,则获取该密钥的存储计数值并更新计数。如果它在地图中尚未存在,那么您希望将长度存储为键,值为1(第一次计数)。
以下是一个示例程序:
import java.util.HashMap;
import java.util.Map;
public class TokenSizes {
Map<Integer, Integer> tokenSizes = new HashMap<>();
public void processToken(String token){
Integer len = token.length();
if(tokenSizes.containsKey(len)){
tokenSizes.put(len, tokenSizes.get(len) + 1);
}
else{
tokenSizes.put(len, 1);
}
}
public void printTokenSizes(){
System.out.println("Token Sizes:\n" + tokenSizes);
}
public static void main(String[] args) {
TokenSizes ts = new TokenSizes();
ts.processToken("hi");
ts.processToken("to");
ts.processToken("say");
ts.printTokenSizes();
}
}
生成输出:
令牌大小:
{2 = 2,3 = 1}
答案 1 :(得分:0)
根据您的要求,
public void processToken(String token)
{
Integer value = tokenSizes.get(token.length());
tokenSizes.put(token.length(), (value == null) ? 1 : value + 1);
}