我使用折叠方法编写了一个哈希函数,以便字谜,即" 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;
}
我有什么遗失的东西吗?
答案 0 :(得分:2)
问题似乎是
行x = Integer.parseInt(x + schar);
您在这里连接字符串,因此参数x + schar
可能会长于int
的最大尺寸。
答案 1 :(得分:0)
java int是32位。您尝试解析的数字是979897108111,超过32位。