Перейти к содержанию

Как разделить строку в Java

Разделение строк – очень частая операция. В этом кратком руководстве рассмотрим некоторые API, которые можно использовать для разделения строк в Java.

String.split()

Начнем с основной библиотеки. Класс String предлагает метод split() – очень удобный и достаточный для большинства сценариев. Он разбивает заданную строку на основе разделителя, возвращая массив строк.

Посмотрим на некоторые примеры. Начнем с разделения, используя запятую:

String[] splitted = "peter,james,thomas".split(",");

Разделим пробелом:

String[] splitted = "car jeep scooter".split(" ");

А теперь разделим точкой:

String[] splitted = "192.168.1.178".split("\\.")

Разделим на несколько символов – запятую, пробел и дефис через регулярное выражение:

String[] splitted = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*"));

StringUtils.split()

Пакет common lang Apache предоставляет класс StringUtils, содержащий null-безопасный метод split(), который разбивается с использованием пробела в качестве разделителя по умолчанию:

String[] splitted = StringUtils.split("car jeep scooter");

Кроме того, он игнорирует лишние пробелы:

String[] splitted = StringUtils.split("car   jeep  scooter");

Splitter.split()

Наконец, в Guava есть подходящий API-интерфейс Splitter:

List<String> resultList = Splitter.on(',')
  .trimResults()
  .omitEmptyStrings()
  .splitToList("car,jeep,, scooter");

Разделить и обрезать

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

Допустим, в качестве входных данных есть следующее:

String input = " car , jeep, scooter ";

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

String[] splitted = input.trim().split("\\s*,\\s*");

Здесь метод trim() удаляет начальные и конечные пробелы во входной строке, а само регулярное выражение обрабатывает лишние пробелы вокруг разделителя.

Можно добиться того же результата, используя функции Java 8 Stream:

String[] splitted = Arrays.stream(input.split(","))
  .map(String::trim)
  .toArray(String[]::new);

Заключение

String.split() обычно достаточно. Однако для более сложных случаев можно использовать класс StringUtils Apache на основе commons-lang или чистые и гибкие API-интерфейсы Guava.

Код статьи доступен на GitHub.

Оригинал