2015-01-24 2 views
0

Предположим, что у меня есть следующее: String example = "12 8 133 | 7 4 2";, и я хочу изменить его на два массива с эквивалентным размером, с намерением позже вытащить отдельные целые числа из каждого.Почему используется разделение, в результате получается отдельный размер массива здесь?

Во-первых, String[] x = example.split("\\|");, а затем

String[] y = x[0].split("\\D");

и

String[] z = x[1].split("\\D");

Почему г один размер больше, чем у?

Как правило, какой способ взять строку, подобную приведенной выше, использует разделитель и добавляет целые числа в списки или массивы эквивалентного размера?

+1

Что в массивах? Я ожидаю, что если вы действительно посмотрите на массивы, должно быть очевидно, почему они имеют разные размеры. – immibis

+0

z больше из-за пространства между | и 7 – Andie2302

+0

@immibis символ пробела находится в массивах. Я это понимаю, но я не понимаю, почему он включен? Я уже пробовал использовать «\\ s +», как предположил Эниссей. – Legato

ответ

4

Вы делите «не цифра» с \\D. Однако пространство до 7 также представляет собой разделитель с пустой строкой перед ним. Итак, z имеет длину 4.

Но после 133 есть пробел. Почему после него нет пустой строки, так что y также имеет длину 4? Поскольку no-arg split method отбрасывает завершающие пустые строки, но не ведет пустые строки.

Чтобы удалить начальную пустую строку, вызовите trim() на элемент от x до разделения.

String[] y = x[0].trim().split("\\D"); 
String[] z = x[1].trim().split("\\D"); 

Кроме того, вы можете использовать шаблон "\\D+", поэтому один или более нецифровые символов в строке будет учитываться в качестве разделителя.

1

Попробуйте это:

String example = "12 8 133 | 7 4 2"; 
String[] x = example.split("\\s+\\|\\s+"); 
String[] y = x[0].split("\\s+"); 
String[] z = x[1].split("\\s+"); 
Смежные вопросы