我正在尝试通过哈希函数将字符串转换为ASCII 值,如下所示:
public long hash(String word){
StringBuilder sb = new StringBuilder();
String ascString = null;
long asciiInt;
for(int i=0;i<word.length();i++){
sb.append((int)word.charAt(i));
}
ascString = sb.toString();
asciiInt = Long.parseLong(ascString);
return asciiInt;
}
以后,我会在我的insert()方法中调用它来使用 hashTable 执行二次散列,并且insert方法如下所示:
public void insert(Word word){
int start = (int)(hash(word.text)%tableSize);
int key = start;
int attempt=0;
while(hashTable[key]!=null){
attempt++;
key=(start+(int)Math.pow(attempt,2))%tableSize;
}
hashTable[key]=word;
}
但是,如果我尝试转换的字符串超过6个字符,它会抛出java.lang.NumberFormatException
。任何人都可以帮我修复它或者更好的方法来提出我的哈希表的关键值吗?
谢谢!
答案 0 :(得分:-1)
您尝试获得的值(基数10长)无法通过您的字符串实现,因为您的错误基础。假设字符串是“DEADBEEF”。因为DEADBEEF的所有数字都是16,所以您可以将基数指定为16并使用
Long.parseLong(DEADBEEF, 16);
非基数方法假定字符串包含基数为10的长度,而实际数字更长(基数为10的DEADBEEF为3735928559)。检查你的字符串可能吗?