Как разбить строку в Java

Введение Часто мы сталкиваемся с ситуацией, когда нам нужно разделить строку на определенный символ или подстроку, чтобы извлечь из нее полезную информацию. Например, мы можем разделить номер телефона на код страны или данные, импортированные из файла CSV. В этой статье мы расскажем, как разбить строку в Java. Метод split () (без ограничений) Этот метод принимает один параметр String в формате регулярного выражения (regex). Этот метод разбивает нить вокруг мата.

Вступление

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

Например, мы можем разделить номер телефона на код страны или данные, импортированные из файла CSV.

В этой статье мы расскажем, как разбить строку в Java.

Метод split () (без ограничений)

Этот метод принимает один String в формате регулярного выражения (regex). Этот метод разбивает строку вокруг совпадений с заданным регулярным выражением.

Синтаксис этого метода:

 String[] split(String regex, int limit) 

Где regex представляет собой разделитель, то есть в зависимости от того, что мы разделим нашу строку. Имейте в виду, что этот параметр не должен быть чем-то сложным, Java просто предоставляет возможность использования регулярных выражений.

Например, давайте посмотрим, как мы можем разделить эту строку на два отдельных имени:

 String myString = "Jane-Doe"; 
 String[] splitString = myString.split("-"); 

Мы можем просто использовать символ / подстроку вместо фактического регулярного выражения. Конечно, в регулярном выражении есть определенные специальные символы, о которых нам нужно помнить и избегать их, если нам нужно их буквальное значение.

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

Результаты упаковываются в массив String. Чтобы получить отдельные имена, мы можем получить доступ к каждому элементу:

 System.out.println(splitString[0]); 
 System.out.println(splitString[1]); 

Это приводит к:

 Jane 
 Doe 

Имейте в виду, что этот метод разделит строку на все вхождения разделителя. Например, у нас может быть вход в формате CSV:

 String myString = "Jane,21,Employed,Software Engineer"; 
 String[] splitString = myString.split(","); 
 
 for (String s : splitString) { 
 System.out.println(s); 
 } 

Это приводит к:

 Jane 
 21 
 Employed 
 Software Engineer 

Метод Java split () (с ограничением)

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

Параметр limit может принимать одну из трех форм, т. Е. Он может быть больше, меньше или больше нуля. Давайте посмотрим, что представляет собой каждая из этих ситуаций:

  • Положительный limit - String будет разделена до максимального limit - 1 раз. Помимо этого, остальная часть строки будет возвращена как последний элемент массива, как есть, без разделения. Длина возвращаемого массива всегда будет меньше или равна limit .
  • Отрицательный limit - String разделяется по разделителю столько раз, сколько возможно, игнорируя конкретный набор отрицательных значений. Подстроки в массиве включают конечные пробелы в исходной строке, если они есть.
  • Когда limit установлен на 0 - String снова разделяется столько раз, сколько возможно, и нет ограничения на длину результирующего массива. Он работает так же, как вызов split() с регулярным выражением в качестве единственного аргумента, как было показано ранее. В этом случае конечные пробелы не возвращаются.

Положительное предельное значение

Давайте рассмотрим несколько примеров использования разных лимитов. Во-первых, положительное limit значение:

 String myString = "there,,are,more,than,three,commas,,,"; 
 String [] splitStrings = myString.split(",", 4); 
 
 for(String string : splitStrings){ 
 System.out.println(String.format(" \" %s \"", string)); 
 } 

При ограничении в 4 String будет разделена не более трех ( limit - 1 ) раз. Это дает нам массив с четырьмя элементами (0..3), последним элементом является все, что находится после третьего разделения:

 "there" 
 "" 
 "are" 
 "more,than,three,commas,,," 

Если бы мы использовали отрицательный limit для этой же String:

 String myString = "there,,are,more,than,three,commas,,,"; 
 String [] splitStrings = myString.split(",", -1); 
 
 for(String string : splitStrings){ 
 System.out.println(String.format(" \" %s \"", string)); 
 } 

String будет разделена столько раз, сколько возможно, а завершающие пустые строки будут добавлены в массив:

 "there" 
 "" 
 "are" 
 "more" 
 "than" 
 "three" 
 "commas" 
 "" 
 "" 
 "" 

Фактическое отрицательное значение, которое мы использовали, не принимается во внимание, мы бы получили тот же результат, если бы использовали -150 .

Если мы установим limit на 0 , строка снова будет разделена столько раз, сколько возможно, но результирующий массив не будет содержать конечных пустых пробелов:

 String myString = "there,,are,more,than,three,commas,,,"; 
 
 // Equivalent to calling the split() method with only the regex parameter 
 String [] splitStrings = myString.split(",", 0); 
 
 for(String string : splitStrings){ 
 System.out.println(String.format(" \" %s \"", string)); 
 } 

Это даст нам:

 "there" 
 "" 
 "are" 
 "more" 
 "than" 
 "three" 
 "commas" 

Примечание о специальных символах

Как мы упоминали ранее, regex переданный в качестве разделителя в split() является регулярным выражением. Мы должны обязательно экранировать специальные символы, если мы хотим использовать их буквальное значение в качестве разделителя. Например, * означает «один или несколько экземпляров следующего символа (ов)».

В регулярном выражении 12 таких символов. К ним относятся: \ , ^ , $ , . , | , ? , * , + , ( , ) , [ , { . Вы можете увидеть их значение в регулярном выражении здесь%2C%20the) .

Если мы хотим разбить String по одному из этих символов, необходимо соблюдать особую осторожность, чтобы экранировать эти символы в параметрах метода. Один из способов использовать это - использовать обратную косую черту \ . Например:

 string.split("\\|"); 

Разделяет string переменной на | персонаж. Здесь мы используем две обратной косой черты, так как нам нужно сначала избежать Java-значения обратной косой черты, поэтому обратная косая черта может быть применена к | персонаж.

Вместо этого мы можем использовать набор символов регулярного выражения. Это относится к помещению специальных символов, которые нужно экранировать, в квадратных скобках. Таким образом, специальные символы обрабатываются как обычные символы. Например, мы могли бы использовать | в качестве разделителя, сказав:

 string.split("[|]"); 

Еще один способ избежать специальных символов - использовать Pattern.quote() :

 string.split(Pattern.quote("|")); 

Заключение

Метод split() класса Java String - очень полезный и часто используемый инструмент. Большинство данных, особенно полученные при чтении файлов, потребуют некоторой предварительной обработки, такой как разделение строки, чтобы получить из нее значимую информацию.

В этой статье мы рассмотрели, как разбивать строки в Java.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus