Java映射具有长度和出现次数值的密钥

时间:2016-04-11 20:22:05

标签: java hashmap

我有一个大文本文件,我已经处理成单个单词(在我的程序中称为标记)。我需要获取这些标记并将它们添加到地图中,该地图具有单词长度的键和出现次数的值。例如,(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);    
}

工作?

2 个答案:

答案 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);    
}