Разделить строку в Java
1. Вступление
РазделениеStrings - очень частая операция; это краткое руководство сосредоточено на некоторых API, которые мы можем использовать для этого просто на Java.
2. String.split()с
Начнем с основной библиотеки - сам классString предлагает методsplit(), который очень удобен и достаточен для большинства сценариев. Он просто разбивает заданныйString на основе разделителя, возвращая массивStrings.
Давайте посмотрим на некоторые примеры. Начнем с разделения через запятую:
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*"));
3. StringUtils.split()с
Пакет common lang Apache предоставляет классStringUtils, который содержит нулевой безопасный методsplit(), который разделяется с использованием пробелов в качестве разделителя по умолчанию:
String[] splitted = StringUtils.split("car jeep scooter");
Кроме того, он игнорирует лишние пробелы:
String[] splitted = StringUtils.split("car jeep scooter");
4. Splitter.split()с
Наконец, на Guava есть приятныйSplitter fluent API:
List resultList = Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList("car,jeep,, scooter");
5. Разделить и обрезать
Иногда данныйString содержит некоторые начальные, конечные или дополнительные пробелы вокруг разделителя. Давайте посмотрим, как мы можем справиться с разделением ввода и обрезкой результатов за один раз.
Допустим, у нас есть это в качестве входных данных:
String input = " car , jeep, scooter ";
Чтобы удалить лишние пробелы до и / или после разделителя, мы можем выполнить разбиение и усечение, используя регулярное выражение:
String[] splitted = input.trim().split("\\s*,\\s*");
Здесь методtrim() удаляет начальные и конечные пробелы во входной строке, а само регулярное выражение обрабатывает лишние пробелы вокруг разделителя.
Мы можем добиться того же результата, используя функции Java 8Stream:
String[] splitted = Arrays.stream(input.split(","))
.map(String::trim)
.toArray(String[]::new);
6. Заключение
String.split() обычно достаточно. Однако для более сложных случаев мы можем использовать класс ApacheStringUtils, основанный на общем языке, или чистые и гибкие API-интерфейсы Guava.
И, как всегда, доступен код статьиover on GitHub.