2014-10-30 38 views
0

我想我字符串轉換通過我的哈希函數,它看起來像這樣以ASCII值:java.lang.NumberFormatException:轉換字符串以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中進行二次哈希和插入方法是這樣的:

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;  
    } 

然而,拋出java.lang.NumberFormatException如果我的字符串試圖轉換超過6個字符。任何人都可以幫助我解決它或更好的方式來爲我的哈希表提供關鍵的價值?

謝謝!

+1

你在做什麼是沒有意義的。什麼目的? – 2014-10-30 01:26:39

+1

看看導致NFE的實際*值*。從那裏倒退。附加一個調試器並逐步完成代碼將非常有啓發性。 – user2864740 2014-10-30 01:26:40

+0

爲什麼不使用HashMap? – beny23 2014-10-30 01:31:44

回答

-1

您試圖獲得的值(基數10長)不能從您的字符串中獲得,因爲您的基數不對。說這個字符串是「DEADBEEF」。由於DEADBEEF的所有數字基地16,你可以指定基數爲16,並使用

Long.parseLong(DEADBEEF, 16); 

非基數方法假定字符串包含一個基數爲10時真的數更長(DEADBEEF長基地10中的3735928559)。檢查你的字符串也許?

+0

你假設字符串原來是一個十六進制字符串或什麼的? – CharlieS 2014-10-30 01:52:27

+0

只有從'String'類型解析出來的任何基地,不能存儲到一個長期。就像,如果字符串中有'h',它至少是18。查看BigInteger' – spb1994 2014-10-30 01:59:32

+0

,所以你建議根據未知字符串的預測內容改變基地? – CharlieS 2014-10-30 04:11:23