Java Метод split() на String с пример
⚡ Умно обобщение
Разделяне на низ Java използвайки метода split(), който разделя текста, където и да има разделител, и връща частите като масив от тип String. Незадължителният аргумент limit ограничава броя на произведените части, оставяйки останалите непокътнати.

В какво се намира низът split(). Java?
- split() методът ви позволява да прекъснете низ въз основа на конкретна Java разделител на низове. Най-често разделителят е интервал или запетая (,), на мястото, където искате да прекъснете низа.
синтаксис на функцията split().
public String[] split(String regex) public String[] split(String regex, int limit)
⚠️ Забележка относно типа на връщане: split() връща String[] масив, нито един StringПрисвояване на резултата на равнина String Променливата не успява да се компилира с грешка за несъвместими типове, което е най-честата грешка, която начинаещите правят с този метод.
Параметър
- Регекс: регулярният израз, приложен към текста или низа.
- Ограничение: максималният брой стойности в получения масив. Ако е пропуснат или е нула, се връща всеки подниз, съответстващ на регулярния израз.
Как да разделим низ Java с разделител
Примерът по-долу показва как да се раздели низ на Java с разделител.
Да предположим, че имаме низова променлива с име strMain съставен от няколко думи — Алфа, Бета, Гама, Delta, Сигма — всички разделени със запетая (,).
Тук, ако искаме всички отделни низове, най-добрият възможен модел би бил да ги разделим въз основа на запетаята. Така ще получим пет отделни низа, както следва:
- Алфа
- Бета
- Гама
- Delta
- Sigma
Използвайте низа разделят метод в Java спрямо низа, който трябва да бъде разделен, и предоставете разделителя като аргумент.
В този Java разделен низ по регистър на разделителя, разделителят е запетая (,) и резултатът от Java операцията разделяне на низ чрез запетая ще ви даде разделяне на масива.
class StrSplit{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit = strMain.split(", ");
for (int i=0; i < arrSplit.length; i++)
{
System.out.println(arrSplit[i]);
}
}
}
Цикълът в кода просто отпечатва всеки Java разделяне на низ от масива след функцията за разделяне в Java, както е показано по-долу.
Очакван резултат:
Alpha Beta Delta Gamma Sigma
Пример: Java String split() метод с регулярен израз и дължина
Да разгледаме ситуация, в която са ви необходими само първите 'n' елемента след функцията split в Java, но искаме останалата част от низа да остане такава, каквато е. Изход, подобен на този:
- Алфа
- Бета
- Delta, Гама, Сигма
Това може да се постигне чрез подаване на друг аргумент заедно с операцията split() в Java, и това ще бъде ограничението на необходимите низове.
Разгледайте следния код на метода split в Java:
class StrSplit2{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit_2 = strMain.split(", ", 3);
for (int i=0; i < arrSplit_2.length; i++){
System.out.println(arrSplit_2[i]);
}
}
}
Очакван резултат:
Alpha Beta Delta, Gamma, Sigma
Обърнете внимание, че ограничението от 3 произвежда точно три елемента: първите два разделителя се спазват, а всичко след втория разделител се съхранява заедно като трети елемент.
Как да разделим низ Java от Space
Да разгледаме ситуация, в която искате да разделите низ с интервал. Тук имаме разделен низ Java променлив на име strMain съставен от няколко думи: Добре дошли в Guru99.
public class StrSplit3{
public static void main(String args[]){
String strMain = "Welcome to Guru99";
String[] arrSplit_3 = strMain.split("\\s");
for (int i=0; i < arrSplit_3.length; i++){
System.out.println(arrSplit_3[i]);
}
}
}
Очакван резултат:
Welcome to Guru99
Шаблонът \\s съвпада с единичен символ за интервал. Използвайте \\s+ вместо това, когато думите могат да бъдат разделени с повече от един интервал, в противен случай всеки допълнителен интервал създава празен елемент.
Как да запазим празни низове при разделяне Java
Едно поведение на split() изненадва почти всички при първата им среща: празни низове, които остават безшумно, се изхвърлят. Разделяне "a,b,," на запетая връща два елемента, а не четири, защото ограничението по подразбиране от нула изхвърля всяко празно поле в края на масива.
Това е от значение, когато данните са позиционни - например CSV ред, където липсваща стойност в края все още заема колона. Загубата на тези празни места измества всеки низходящ индекс.
Преминавайки a отрицателен ограничението ги държи:
String row = "Alpha,Beta,,"; // Default: trailing empty fields removed -> length 2 String[] a = row.split(","); System.out.println(a.length); // prints 2 // Negative limit: every field preserved -> length 4 String[] b = row.split(",", -1); System.out.println(b.length); // prints 4
Три правила обхващат всеки случай. Лимит от нула, което е настройката по подразбиране, прилага шаблона колкото е възможно повече пъти и след това премахва празни низове. A положителен limit прилага шаблона най-много limit минус един път, така че последният елемент съдържа недокоснатия остатък, точно както е показано в предишния пример с limit от 3. A отрицателен limit прилага шаблона колкото е възможно повече пъти и запазва всяко празно поле, включително и последните.
Водещите празни низове се държат по различен начин отново: разделяне ",a,b" винаги дава празен първи елемент, независимо от ограничението, защото шаблонът съвпада на позиция нула. Предпазете се от това, като отрежете входа или филтрирате получения масив преди употреба.
split() срещу StringTokenizer срещу Pattern.split(): Кой да използвате
Java предлага три начина за разделяне на низ на части. Те се различават по вида разделител, който всеки приема, по това какво връщат и по това дали шаблонът се компилира веднъж или се прекомпилира при всяко извикване, което има значение, след като разделянето се случи в рамките на цикъл.
| Аспект | String.split() | StringTokenizer | Pattern.split() |
|---|---|---|---|
| Разделител | Редовен израз | Набор от единични символи | Редовен израз |
| Връщане | низ[] | Токени чрез изброяване | низ[] |
| Компилиран шаблон | При всяко обаждане | Не е приложимо | Веднъж, после използвано повторно |
| Запазва празни полета | Само с отрицателна граница | Никога | Само с отрицателна граница |
| Статус | ПРЕПОРЪЧВА: | Наследствено, запазено за съвместимост | Препоръчва се в цикли |
употреба String.split() за обикновена еднократна работа, тъй като е най-кратък за писане и се чете ясно. Предварително компилирайте с Pattern.compile(",").split(text) при разделяне в рамките на цикъл, защото регулярният израз се компилира еднократно, а не при всяка итерация. Избягвайте StringTokenizer в нов код; остава само за обратна съвместимост.
Общ Java Грешки при split() и как да ги поправим
Почти всеки проблем с split() tracВръща се към една от две причини: аргументът е регулярен израз, а не буквален низ, или описаните по-горе правила за ограничаване неочаквано отхвърлят полета. Всяка грешка по-долу посочва своя симптом и решение.
- Разделянето на точка връща празен масив:
"1.2.3".split(".")съвпада с всеки символ, защото точката е regex wildcard. Избягвайте я катоsplit("\\."). - Разделянето на тръба се държи странно: Вертикалната чертичка означава редуване в регулярния израз. Ескейпирайте я като
split("\\|"). - Грешка при несъвместими типове: резултатът беше присвоен на
StringДекларирайте променливата катоString[]. - Неочакван празен първи елемент: Разделителят се появява в началото на входа. Първо отрежете низа.
- Липсващи стойности в края: Последните празни полета бяха отхвърлени от ограничението по подразбиране. Pass
-1като втори аргумент. - Изключение за NullPointer:
split()беше извикана при null препратка. Проверете за null преди разделяне, тъй като методът не може да го обработи.

