2014-10-30 2 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;   
    } 

и в дальнейшем, я буду называть его в моей вставке() метод для выполнения квадратного хэширования с использованием в 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

Что вы делаете, не имеет смысла. В чем цель? –

+1

Посмотрите на фактическое * значение *, которое приводит к NFE. Отправляйтесь оттуда назад. Прикрепление отладчика и переход через код будет очень ... просвещением. – user2864740

+0

Почему бы не использовать HashMap? – beny23

ответ

-1

Ценность, которую вы пытаетесь получить (базовая 10 длинная), не может быть достигнута из вашей строки, потому что у вас неправильная база. Скажем, строка «DEADBEEF». Поскольку все цифры DeaDBeeF являются базой 16, вы можете указать десятичную как 16 и использовать

Long.parseLong(DEADBEEF, 16); 

Метод без радикс предполагает, что строка содержит базовый 10 долго, когда на самом деле это число гораздо больше (DeaDBeeF является 3735928559 в базе 10). Проверьте, может быть, ваша строка?

+0

Вы предполагаете, что строка изначально была шестнадцатеричной или что-то еще? – CharlieS

+0

Просто любая база, которая при анализе из типа 'String' не может быть сохранена в длинном. Например, если в строке есть «h», это, по крайней мере, base-18. Проверьте «BigInteger» – spb1994

+0

, поэтому вы рекомендуете менять базу в зависимости от прогнозируемого содержимого неизвестной строки? – CharlieS

Смежные вопросы