String.join în Java

Lipește mai multe șiruri într-unul singur, cu un separator între ele (opusul lui split).

Sintaxă
static String join(CharSequence separator, CharSequence... elemente)
static String join(CharSequence separator, Iterable<? extends CharSequence> elemente)

Ce face String.join

String.join(sep, ...) este o metodă statică: o apelezi pe clasă, nu pe un șir. Primește separatorul și elementele, fie ca listă de argumente, fie ca array, fie ca orice colecție de șiruri (List, Set). Separatorul apare doar între elemente, nu și la final.

Un element null apare ca textul "null". Elementele trebuie să fie deja texte; pentru numere, transformă-le întâi sau folosește Collectors.joining pe un stream.

Parametri

Parametru Descriere
separator Textul pus între elemente (poate fi gol).
elemente Șirurile de lipit: argumente separate, array sau colecție.

Ce returnează

Un String nou; șirul gol dacă nu există elemente.

Exemple

Exemplul 1: Lipirea unor nume

import java.util.List;

public class Main {
    public static void main(String[] args) {
        System.out.println(String.join(", ", "Ana", "Ion", "Maria"));
        List<String> orase = List.of("Iași", "Cluj", "Timișoara");
        System.out.println(String.join(" -> ", orase));
        String[] parti = {"2024", "05", "17"};
        System.out.println(String.join("-", parti));
        System.out.println("[" + String.join(",", List.of()) + "]");
    }
}

Rezultat

Ana, Ion, Maria
Iași -> Cluj -> Timișoara
2024-05-17
[]

Exemplul 2: split și join împreună

Transformăm un rând cu spații într-un rând CSV.

public class Main {
    public static void main(String[] args) {
        String rand = "Popescu   Ana    Iași";
        String csv = String.join(";", rand.split("\\s+"));
        System.out.println(csv);
    }
}

Rezultat

Popescu;Ana;Iași

Greșeli frecvente

  • Construiești lista cu un separator la final, într-o buclă, și apoi tai ultima virgulă. String.join rezolvă direct.
  • Încerci String.join(", ", List.of(1, 2, 3)): nu compilează, elementele trebuie să fie texte. Folosește stream().map(String::valueOf).collect(Collectors.joining(", ")).

Comenzi înrudite

  • String.split: Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.
  • String.concat: Returnează un șir nou format din șirul curent urmat de str; echivalent cu + pentru două șiruri.
  • StringBuilder.append: Adaugă la sfârșitul textului un șir, un caracter, un număr sau orice obiect și returnează același StringBuilder.
  • String.repeat: Returnează șirul repetat de count ori, lipit; util pentru linii, chenare și alinieri.