2013-08-29 6 views
4

У меня есть строка что-то вроде этогоРазделение строки Java возвращает пустой массив?

"myValue"."Folder"."FolderCentury"; 

Я хочу разделить с точки («»). Я пытался на код ниже:

String a = column.replace("\"", ""); 
String columnArray[] = a.split("."); 

Но columnArray приходит пустой. Что я здесь делаю неправильно?

Я хочу добавить еще кое-что, где-то его возможный объект массива String будет содержать spitted значение, как упомянуто ниже, только два объекта, а не три.?

columnArray[0]= "myValue"."Folder"; 
columnArray[1]= "FolderCentury"; 
+0

Я добавил еще несколько спецификаций, поэтому он не должен выглядеть как дубликат. – Programmer

ответ

25

Обратите внимание, что String#split принимает регулярное выражение.

Вы должны избежать special char. (Это означает, что "Любой символ"):

String columnArray[] = a.split("\\."); 

(Экранирование регулярного выражения осуществляется \, но в Java, \ записываются как \\).

Вы также можете использовать Pattern#quote:

Возвращает буквального шаблон Строка для указанной строки.

String columnArray[] = a.split(Pattern.quote("."));

По отводящих регулярного выражения, компилятор для лечения . как Строки., а не специального символа..

+0

Я добавил еще одну вещь в том же вопросе, возможно ли это? – Programmer

+0

'columnArray [0] =" myValue "." Folder ";' Это не будет компилироваться. – Maroun

+0

Да, но String внутри столбцаArray [0], и это сработало бы у меня есть еще сложность, как это значение приходит только я хочу, как я могу разделить его, как две строки – Programmer

4

Вы должны избегать точки.

1

split() принимает регулярное выражение. Поэтому вам нужно пропустить «.» не считать его метасимволом регулярного выражения.

String[] columnArray = a.split("\\."); 
0

При использовании специальных символов необходимо использовать с ним конкретную управляющую последовательность.

'.' является особым символом, поэтому необходимо использовать escape-последовательность до '.' как:

String columnArray[] = a.split("\\."); 
1

Следующий код:

String input = "myValue.Folder.FolderCentury"; 
    String regex = "(?!(.+\\.))\\."; 
    String[] result=input.split(regex); 
    System.out.println(Arrays.toString(result)); 

Производит требуемую мощность:

[myValue.Folder, FolderCentury] 

Регулярное выражение твики немного с отрицательным заглядывая вперёд (это (?!) часть), так он будет соответствовать только последней точке в строке с более чем одной точкой.

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