Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как бороться с String index out of range: 0? 
V
    Опции темы
VKoresh
Дата 12.7.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

Репутация: 1
Всего: 1



 Как бороться с String index out of range: 0?

Спросил у Гугла - ничего вразумительного...  smile 

Код

String[] ars = new String[k];           // создать массив размером = количеству присланных комманд

                         for (i = 0; i < k; i++)
                         {
                             ars[i] = "";                       //обнулить строку массива присланных команд
                             System.out.println("ars[" + i + "] cleared - " + ars[i]);
                             System.out.println("ostatok sb= "+sb);

                             if (sb.charAt(0) == '%')
                             {
                                 System.out.println("first symbol was deleted");
                                 sb.deleteCharAt(0);
                             }

                             do             //вылетает из этого цикла :(                    
                             {

                                 ars[i] = ars[i] + sb.charAt(0);    //добавить символ
                                 sb.deleteCharAt(0);                //удалить символ
                                 System.out.println("ars[" + i + "] " + ars[i]);    
                                
                             }
                             while ((sb.charAt(0) != '%') || (sb.toString() == ""));    //добавлять до следующей комманды или до конца

                             System.out.println("ars[" + i + "] " + ars[i]);
                            
                            
                         }



Вот кусок кода. Подскажите, пожалйста.  smile 
Причем вылетает на последней записываемой в массив команде....

Это сообщение отредактировал(а) VKoresh - 12.7.2007, 13:10
PM MAIL ICQ   Вверх
W0LF
Дата 12.7.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Цитата

Причем вылетает на последней записываемой в массив команде....

Это какая строчка?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Antropoid
Дата 12.7.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 13
Всего: 16



Очень нечеткий кусок кода, - что такое k,sb
Вылетает, потому что ты обращаешься к пустому StringBuffer'y (sb скорей всего ссылка на объект этого класса), - 
Код

(sb.charAt(0) != '%')

если б хотя бы это стояло на втором месте в условии while, то все было бы ОК.
И еще шо-то по коду я так и не понял, -  конец потока ты определяешь так
Код

(sb.toString() == "")

?
Если да, то это не верно, т.к. StringBuffer даже будучи пустым выдает "" при вызове toString() у него. Делай так (sb.length() == 0), ну или как там тебе надо с проверкой на пустоту.


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
batigoal
Дата 12.7.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Antropoid @  12.7.2007,  22:36 Найти цитируемый пост)
если б хотя бы это стояло на втором месте в условии while, то все было бы ОК.

Не было бы, потому что там "или"  smile 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Antropoid
Дата 12.7.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 13
Всего: 16



Цитата(batigoal @  12.7.2007,  22:43 Найти цитируемый пост)
Не было бы, потому что там "или"   

Это почему еще?
Там по логике проверяется StringBuffer на наличие пустоты, если бы это было на первом месте в условии while и буфер оказался пустым, т.е. выдал бы true, то дальше компилятор не пошел бы и уже не выбросил бы эксцепшн на методе charAt. Разве нет?


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
batigoal
Дата 13.7.2007, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Antropoid @  13.7.2007,  00:52 Найти цитируемый пост)
Это почему еще?

Ты прав, я невнимательно посмотрел. Мне показалось, там 
sb.toString() != ""



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Dancer
Дата 13.7.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



http://forum.sources.ru/index.php?showtopic=194906
он уже давно всё нашёл, только вот сюда не отписался smile, а вы тут голову ломаете ....


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
VKoresh
Дата 13.7.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

Репутация: 1
Всего: 1



Я извеняюсь, если завел вас в некоторое заблуждение.  smile 
Попытаюсь донести, собственно, что приложение должно было делать.

Приходит строчка вида - %LLY4RSJ%3fyth46Yhy%ldtjhblT5K51

И надо ее разбить на %LLY4RSJ%3fyth46Yhy и %ldtjhblT5K51, и запихать в массив.

Придумывал велосипед 2 дня, а потом прикрутил к J2ME Tokenizer - Tokenizer

По итогу сделал так:

Код

k = 0;
                     for (i = 0; i < sb.length()-1; i++)
                     {
                         if (sb.charAt(i) ='%')        // если нашел % увеличить количество комманд
                         {
                             k++;
                         }
                     }
                     System.out.println("count of received commands " + k);
                     String[] ars = new String[k];   //создает массив размером, равным количеству принятых комманд

                     String str = sb.toString();        // sb - StringBuffer с принятой строкой
                    
                     StringTokenizer st = new StringTokenizer(str, "%");  // % - разделитель между коммандами
                    
                     for (i = 0; st.hasMoreElements(); i++)                        // собственно запичивает в массив
                     {
                         ars[i] =st.nextToken().trim();
                         System.out.println("ars[i] "+ars[i]);                        
                     }            



Всем спасибо!   smile 


Dancer, опередил на 10 мин! smile 

Это сообщение отредактировал(а) VKoresh - 13.7.2007, 09:40
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0807 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.