折叠方法哈希函数的数字格式异常

时间:2016-12-05 03:12:01

标签: java eclipse hash hashcode numberformatexception

我使用折叠方法编写了一个哈希函数,以便字谜,即" ape" &安培;"豌豆"会哈希到相同的值。到目前为止,我投入的大多数字符串都有效。但在某些情况下,我得到数字格式例外。

例如当我传递字符串"鲍鱼"当表格大小为109时,弹出异常,而字符串" abalon"没有。

private static int Hash(String theString,int theTableSize){
    //ignore case and remove all non-alphanumeric characters
    String temp = theString.toLowerCase();
    temp = temp.replaceAll("[^a-zA-Z0-9]", "");

    //sort to count # and type of characters when hashing, NOT alphabetical order
    char[] arr = temp.toCharArray();
    Arrays.sort(arr);
    temp = new String(arr);

    //Folding Method for Hash
    String str_A = temp.substring(0, temp.length()/2);
    String str_B = temp.substring(temp.length()/2, temp.length());

    System.out.println(str_A + " " + str_B );

    return (folding(str_A) + folding(str_B)) % theTableSize;
}

private static int folding(String substring){
    int x = 0;
    for(int i = 0; i < substring.length(); i++){
        int tchar = substring.charAt(i);
        String schar = Integer.toString(tchar);
        System.out.println(schar);
        x = Integer.parseInt(x + schar) ;
        x = Math.abs(x);
    }
    return x;
}

我有什么遗失的东西吗?

2 个答案:

答案 0 :(得分:2)

问题似乎是

x = Integer.parseInt(x + schar);

您在这里连接字符串,因此参数x + schar可能会长于int的最大尺寸。

答案 1 :(得分:0)

java int是32位。您尝试解析的数字是979897108111,超过32位。