PDA

Показать полную графическую версию : Ошибочка


d_tryuk@vk
07-08-2012, 09:21
Здравствуйте, не подскажите где ошибка?
package test;

public class Test {

public static void main(String[] args) {

String S = "Hello";
String S1 = "world";
S += ", " + S1 + "!";

String parts[] = S.split(" ");
String parts1[] = S.split(" и");
System.out.println(parts1[2]);
}

}

Вот часть из учебничка Метод split(String regExp) разбивает строку на фрагменты, используя в качестве разделителей символы, входящие в параметр regExp, и возвращает ссылку на массив, составленный из этих фрагментов. Сами разделители ни в одну подстроку не входят.
String parts[] = S.split(" "); // Разбили строку S на отдельные слова, используя пробел в качестве разделителя, в результате получили массив parts, где parts[0] = "Привет,", а parts[1] = "мир!"
String parts[] = S.split(" и"); // Разбили строку S на отдельные слова, используя в качестве разделителя пробел и букву и, в результате parts[0] = "Пр", parts[1] = "вет,", parts[2] = "м", parts[3] = "р!"

Tonny_Bennet
07-08-2012, 09:26
В вашем примере строка выглядит не как "Привет, мир" кириллицей, а "Hello, world". И если вы пытаетесь использовать в качестве второго разделителя пробел и кириллическую букву "и" у вас ничего не выйдет т.к. в исходных строках этого символа нет.

Замените "Hello" на "Привет" и "world" на "мир" тогда заработает.

d_tryuk@vk
07-08-2012, 09:27
Точно, глупая ошибка. Не заметил. :)
Спасибо.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at test.Test.main(Test.java:13)
Что это?

Tonny_Bennet
07-08-2012, 10:18
Что это? »
Для таких вещей существует поиск в Гугл. Вставляете ошибку нажимаете найти. На первой странице наверняка будет ответ.

Если переводить дословно будет ясно: исключение вызвано тем что индекс массива выходит за пределы.

String parts[] = S.split(" "); »
Этой строкой вы создали массив, разделив строку при помощи пробелов. Получился массив, состоящий из 2-х элементов. Обычно массивы индексируются начиная с 0, т.е. у вас два элемента массива: первый с индексом 0 а второй с индексом 1.

Здесь же
System.out.println(parts1[2]); »
Вы обращаетесь к элементу с индексом 2. А такого элемента в массиве нет - поэтому возникло исключение.

d_tryuk@vk
07-08-2012, 11:33
String parts[] = S.split(" "); » »
System.out.println(parts1[2]); » »
Тут же два разных массива. Обращаюсь я к тому где разделил строку с помощью пробела и буквы "и".

Tonny_Bennet
07-08-2012, 13:03
Согласен недоглядел. Но ошибка есть другая. Делаем задание руками

Строка: Привет, мир
Делим строку при помощи пробела: {Привет,} {мир}
Делим строку при помощи " и": ничего не получаем т.к. в исходной строке не встречается сочетание пробела и буквы "и" соответственно результатом данного разделения служит null (скорее всего) и обращаться к элементу массива которого не существует нельзя.

Iska
07-08-2012, 13:19
Делим строку при помощи " и": ничего не получаем »
Точно? А не массив из одного элемента будет?

Tonny_Bennet
07-08-2012, 17:49
Точно? А не массив из одного элемента будет? »

Согласен, ошибся. А в мануал лезть было лень. http://javascript.ru/String/split

d_tryuk@vk
07-08-2012, 20:13
http://javascript.ru/String/split »
А причём здесь мануал по JavaScript? :)

Tonny_Bennet
08-08-2012, 09:45
А причём здесь мануал по JavaScript? »


Разницы в принципе нет. В Java метод Split ведёт себя абсолютно так же.

http://docs.oracle.com/javase/6/docs/api/


public String[] split(String regex,
int limit)

Splits this string around matches of the given regular expression.

The array returned by this method contains each substring of this string that is terminated by another substring that matches the given expression or is terminated by the end of the string. The substrings in the array are in the order in which they occur in this string. If the expression does not match any part of the input then the resulting array has just one element, namely this string.




© OSzone.net 2001-2012