String.split în Java

Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.

Sintaxă
String[] split(String regex)
String[] split(String regex, int limita)
String[] splitWithDelimiters(String regex, int limita)   // Java 21

Ce face String.split

split(regex) taie șirul acolo unde găsește separatorul și returnează bucățile ca String[]. Separatorul este o expresie regulată: "," și ";" merg direct, dar punctul, bara verticală și alte caractere speciale trebuie „scăpate”: "\\.", "\\|". "\\s+" înseamnă „unul sau mai multe spații”.

Bucățile goale de la final sunt eliminate: "a,b,,".split(",") dă [a, b]. Argumentul limita schimbă asta: cu o valoare pozitivă, rezultatul are cel mult atâtea bucăți (ultima conține restul); cu -1, se păstrează și bucățile goale de la final.

splitWithDelimiters (Java 21) returnează și separatorii găsiți, intercalați cu bucățile.

Parametri

Parametru Descriere
regex Separatorul, ca expresie regulată.
limita Opțional. > 0: numărul maxim de bucăți; 0 (implicit): elimină golurile de la final; < 0: păstrează tot.

Ce returnează

Un String[] cu bucățile (cel puțin un element).

Exemple

Exemplul 1: Un rând CSV

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String rand = "Ana;Popescu;Iași;21";
        String[] campuri = rand.split(";");
        System.out.println(campuri.length + " câmpuri");
        System.out.println("Oraș: " + campuri[2]);
        int varsta = Integer.parseInt(campuri[3]);
        System.out.println("Anul viitor: " + (varsta + 1));
        System.out.println(Arrays.toString("Ion  Maria   Dan".split("\\s+")));
    }
}

Rezultat

4 câmpuri
Oraș: Iași
Anul viitor: 22
[Ion, Maria, Dan]

Exemplul 2: Caractere speciale, goluri și limită

split(".") fără „escape” dă un array gol: punctul înseamnă „orice caracter”.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String ip = "192.168.1.10";
        System.out.println(Arrays.toString(ip.split(".")));
        System.out.println(Arrays.toString(ip.split("\\.")));
        System.out.println(Arrays.toString("a,b,,".split(",")));
        System.out.println(Arrays.toString("a,b,,".split(",", -1)));
        System.out.println(Arrays.toString("cheie=valoare=cu=egal".split("=", 2)));
    }
}

Rezultat

[]
[192, 168, 1, 10]
[a, b]
[a, b, , ]
[cheie, valoare=cu=egal]

Exemplul 3: splitWithDelimiters: și separatorii

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String calcul = "12+30-5+8";
        System.out.println(Arrays.toString(calcul.split("[+-]")));
        System.out.println(Arrays.toString(calcul.splitWithDelimiters("[+-]", 0)));
    }
}

Rezultat

[12, 30, 5, 8]
[12, +, 30, -, 5, +, 8]

Greșeli frecvente

  • Împarți după "." sau "|" fără backslash. Sunt caractere speciale în expresiile regulate; scrie "\\." și "\\|" (sau Pattern.quote(".")).
  • Numeri câmpurile unui CSV cu split(",") și pierzi coloanele goale de la final. Folosește split(",", -1).
  • Accesezi parti[1] fără să verifici lungimea: dacă separatorul lipsește, array-ul are un singur element.

Comenzi înrudite

  • String.join: Lipește mai multe șiruri într-unul singur, cu un separator între ele (opusul lui split).
  • String.lines: Împarte șirul în rânduri și le returnează ca Stream<String>, recunoscând \n, \r și \r\n.
  • String.matches: Verifică dacă ÎNTREGUL șir se potrivește cu o expresie regulată (validare de formate).
  • String.replaceAll: Înlocuiește toate (replaceAll) sau doar prima (replaceFirst) potrivire a unei expresii regulate.
  • String.substring: Returnează o bucată din șir: de la beginIndex (inclusiv) până la endIndex (exclusiv) sau până la final.