2014-10-30 3 views
0

I는 다음과 같습니다 내 해시 함수를 통해 값을 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;   
    } 

나중에 것은, 내가 그것을 호출 내 삽입에() 메소드가 해시 테이블를 사용하여 차 해싱을 수행하고, 삽입 방법은 다음과 같습니다 그러나

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를 throw하면 내가 문자열 변환하려는 문자가 6 자 이상입니다. 누구나 내가 해시 테이블의 핵심 가치를 고안해내는 데 도움이 될 수 있습니까?

감사합니다.

+1

당신이하고있는 일은 말이되지 않습니다. 목적은 무엇입니까? –

+1

NFE에서 나타나는 실제 * 값 *을보십시오. 거기에서 뒤로 작업하십시오. 디버거를 연결하고 코드를 단계별로 실행하면 매우 효과적입니다. – user2864740

+0

HashMap을 사용하지 않는 이유는 무엇입니까? – beny23

답변

-1

잘못된베이스를 가졌으므로 문자열에서 얻을 수있는 값 (기본 10 길이)을 얻을 수 없습니다. 문자열이 "DEADBEEF"라고 가정 해보십시오. DEADBEEF의 모든 숫자가베이스 (16)이기 때문에, 당신은 16로 기수를 지정하고 비 기수 방법은 문자열이가베이스 (10)는 정말 숫자가 더 이상 (DEADBEEF이 긴 경우 포함되어 있다고 가정

Long.parseLong(DEADBEEF, 16); 

사용할 수 있습니다 베이스 10에 3735928559). 너의 문자열을 확인해 볼까?

+0

문자열을 원래 16 진수 문자열이라고 가정합니까? – CharlieS

+0

'String'형식에서 파싱 할 때 long에 저장할 수없는 모든 기반. 마찬가지로, 문자열에 'h'가 있으면 최소한 base-18입니다. 'BigInteger' – spb1994

+0

을 확인하십시오. 따라서 알려지지 않은 문자열의 예측 된 내용에 따라베이스를 변경하는 것이 좋습니다. – CharlieS

관련 문제