Разделете низ в Java

1. Въведение

Разделянето на струни е много честа операция; този бърз урок е фокусиран върху някои от API, които можем да използваме, за да направим това просто в Java.

2. 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*"));

3. StringUtils.split ()

Общият пакет на Apache предоставя клас StringUtils - който съдържа нулево безопасен метод split () , който се разделя, използвайки празно пространство като разделител по подразбиране:

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

Освен това, той игнорира допълнителни интервали:

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

4. Splitter.split ()

И накрая, в Guava също има хубав API за свободно използване на Splitter :

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

5. Разделяне и подрязване

Понякога даден низ съдържа някои водещи, последващи или допълнителни интервали около разделителя. Нека да видим как можем да се справим с разделянето на входа и изрязването на резултатите с едно движение.

Да кажем, че имаме това като вход:

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);

6. Заключение

String.split () обикновено е достатъчен. За по-сложни случаи обаче можем да използваме класа StringUtils , базиран на commons-lang , или чистите и гъвкави API на Guava.

И както винаги, кодът за статията е достъпен в GitHub.