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.