Looking for java Keywords? Try Ask4Keywords

Java Language Разделение строк


пример

Вы можете разделить String на конкретный разделительный символ или регулярное выражение , вы можете использовать метод String.split() который имеет следующую подпись:

public String[] split(String regex)

Обратите внимание, что разделительный символ или регулярное выражение удаляется из результирующего массива String.

Пример с использованием разделительного символа:

String lineFromCsvFile = "Mickey;Bolton;12345;121216";
String[] dataCells = lineFromCsvFile.split(";");
// Result is dataCells = { "Mickey", "Bolton", "12345", "121216"};

Пример с использованием регулярного выражения:

String lineFromInput = "What    do you need    from me?";
String[] words = lineFromInput.split("\\s+"); // one or more space chars
// Result is words = {"What", "do", "you", "need", "from", "me?"};

Вы даже можете разделить String литерал:

String[] firstNames = "Mickey, Frank, Alicia, Tom".split(", ");
// Result is firstNames = {"Mickey", "Frank", "Alicia", "Tom"};

Предупреждение . Не забывайте, что параметр всегда рассматривается как регулярное выражение.

"aaa.bbb".split("."); // This returns an empty array

В предыдущем примере . рассматривается как подстановочный знак регулярного выражения, который соответствует любому символу, и поскольку каждый символ является разделителем, результатом является пустой массив.


Разделение на основе разделителя, который является метасимволом регулярного выражения

Следующие символы считаются специальными (иначе метасимволами) в регулярном выражении

  < > - = ! ( ) [ ] { } \ ^ $ | ? * + . 

Чтобы разбить строку на основе одного из указанных разделителей, вам нужно либо сбежать с помощью \\ либо использовать Pattern.quote() :

  • Использование Pattern.quote() :

     String s = "a|b|c";
     String regex = Pattern.quote("|");
     String[] arr = s.split(regex);
    
  • Выход из специальных символов:

     String s = "a|b|c";
     String[] arr = s.split("\\|");
    

Сплит удаляет пустые значения

split(delimiter) по умолчанию удаляет конечные пустые строки из массива результатов. Чтобы отключить этот механизм, нам нужно использовать перегруженную версию split(delimiter, limit) с ограничением, установленным на отрицательное значение, например

String[] split = data.split("\\|", -1);

split(regex) внутренне возвращает результат split(regex, 0) .

Предельный параметр управляет количеством применений шаблона и, следовательно, влияет на длину результирующего массива.
Если предел n больше нуля, шаблон будет применен не более n - 1 раз, длина массива будет не больше n , а последняя запись массива будет содержать все входные данные за пределами последнего сопоставленного разделителя.
Если n отрицательно, то шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину.
Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены.


Разделение с помощью StringTokenizer

Помимо метода split() Строки также можно разделить с помощью StringTokenizer .

StringTokenizer является еще более ограничивающим, чем String.split() , а также немного сложнее в использовании. Он по существу предназначен для вытаскивания токенов, ограниченных фиксированным набором символов (заданных как String ). Каждый символ будет действовать как разделитель. Из-за этого ограничения он примерно в два раза быстрее, чем String.split() .

Набор символов по умолчанию - это пустые пространства ( \t\n\r\f ). Следующий пример будет печатать каждое слово отдельно.

String str = "the lazy fox jumped over the brown fence";
StringTokenizer tokenizer = new StringTokenizer(str);
while (tokenizer.hasMoreTokens()) {
    System.out.println(tokenizer.nextToken());
}

Это напечатает:

the
lazy 
fox 
jumped 
over 
the 
brown 
fence

Вы можете использовать разные наборы символов для разделения.

String str = "jumped over";
// In this case character `u` and `e` will be used as delimiters 
StringTokenizer tokenizer = new StringTokenizer(str, "ue");
while (tokenizer.hasMoreTokens()) {
    System.out.println(tokenizer.nextToken());
}

Это напечатает:

j
mp 
d ov
r