java.lang.StringIndexOutOfBoundsException Ошибка при чтении двоичной строки - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть длинная строка с двоичными значениями. И у меня есть хэш-карта, которая имеет двоичные цифры в качестве ключа и символ в качестве значения. У меня есть функция, которая должна читать двоичную строку, используя 2 указателя, сравнивать с hashmap и сохранять соответствующий символ в main.decodedTxt. Тем не менее, я получаю строку из связанного исключения для этого. Я не знаю, как это решить. Я получаю исключение в строке "String temp =". У меня есть ссылка на изображение вывода консоли, чтобы увидеть более качественную картинку.

 public static void bitStringToText (String binText){
    String bs = binText;
    int from =0;
    int to = 1;

    while(bs != null){
        String temp = bs.substring(from, to);
        if (main.newMapDecoding.containsKey(temp)){
        main.decodedTxt += main.newMapDecoding.get(temp);
        from =to;
        to = from +1;
        } else {
            to = to + 1;
        }
    }
}

Изображение исключения консоли здесь

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Прежде всего нет необходимости проверять, является ли bs значением null, потому что ни одна часть вашего кода не меняет значение bs.Ваш текущий код пересечет возможный индекс вашего binText в какой-то момент.Лучше просто зациклить binText и проверить, есть ли в нем что-то.В конце концов вы должны пройти всю строку в любом случае.Измените свой код следующим образом

public static void bitStringToText (String binText){

//no need to do this if you are not modifying the contents of binText
//String bs = binText; 

int from =0;
int to = 1;
int size = binText.length();
String temp = "";

while(to <= size ){
    temp = binText.substring(from, to);
    if (main.newMapDecoding.containsKey(temp)){
    main.decodedTxt += main.newMapDecoding.get(temp);
    from =to;
    to = from +1;
    } else {
        to = to + 1;
    }
  }
}

Надеюсь, это поможет.

0 голосов
/ 12 ноября 2018

Во-первых, попробуйте на практике отладку. Это простой случай. Либо используйте запуск в режиме отладки (установите точку останова на строке String temp = bs.substring(from, to);), либо напечатайте значения from и to перед той же строкой. Это поможет понять, что происходит.


Решение:

Если bs не равно нулю, у вас всегда будет StringIndexOutOfBoundsException. Потому что вы не проверяете, указывает ли to на несуществующий индекс bs String. Простейшим примером первого будет пустая строка: bs == "".

Одним из решений может быть замена условия в while (to <= bs.length()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...