Java Метод split() на String с пример

⚡ Умно обобщение

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

  • 🧩 Тип връщане: split() връща String[], никога единичен String, така че резултатът трябва да бъде присвоен на масив.
  • 🔤 Разделителят е регулярен израз: Аргументът е регулярен израз, така че символи като точка и вертикална черта се нуждаят от esca.ping.
  • 🔢 Аргумент за ограничение: Преминаването на ограничение от 3 води до две разделени части и запазва останалата част от текста като последен елемент.
  • Шаблон за празно пространство: Шаблонът \\s съвпада с всеки отделен символ за интервал, който разделя изречението на думи.
  • 🕳️ Завършващи празни места: Празните завършващи полета се отхвърлят, освен ако не е зададено отрицателно ограничение.
  • 🔁 Резултати от четенето: Стандартен for цикъл върху дължината на масива отпечатва всяка част подред.

Java Метод String split().

В какво се намира низът 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, Сигма — всички разделени със запетая (,).

 Разделяне на низ Java

Тук, ако искаме всички отделни низове, най-добрият възможен модел би бил да ги разделим въз основа на запетаята. Така ще получим пет отделни низа, както следва:

  • Алфа
  • Бета
  • Гама
  • 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, но искаме останалата част от низа да остане такава, каквато е. Изход, подобен на този:

  1. Алфа
  2. Бета
  3. 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 преди разделяне, тъй като методът не може да го обработи.

Въпроси и Отговори

Използвайте клас символи, както е в split("[,;]"), което се прекъсва или на запетая, или на точка и запетая. Алтернацията също работи: split(",|;").

Да. Увийте масива с Arrays.asList(text.split(",")) за изглед с фиксиран размер или new ArrayList<>(Arrays.asList(...)) когато списъкът трябва да бъде променен впоследствие.

Да. AI Инструментите генерират работещ шаблон от описан формат и обясняват всеки токен. Тествайте резултата спрямо гранични случаи, като например празни полета и стойности в кавички, преди да му се доверите.

Асистентите с изкуствен интелект идентифицират дали причината е неекраниран метасимвол, отхвърлено завършващо поле или водещ разделител, които са трите обяснения за неочаквана дължина на масива.

Само за прости данни. Не може да обработва запетаи в полета с кавички или вградени разделители на редове, така че специална CSV библиотека е по-безопасна за реални файлове. Четенето им ред по ред с BufferedReader се съчетава добре с такава библиотека.

Обобщете тази публикация с: