STRING STATINIAI METODAI

Java String join() metodas

String.join() sujungia kelias teksto reikšmes į vieną String ir tarp jų įterpia pasirinktą skirtuką. Tai patogus būdas kurti sąrašus, eilutes eksportui ar aiškiai suformatuotą tekstą.

Pirmasis sujungimas

String rezultatas = String.join(", ", "Java", "Spring", "SQL");

System.out.println(rezultatas);
Konsolės rezultatas

Java, Spring, SQL

  1. Pirmas argumentas ", " yra skirtukas.
  2. Po skirtuko perduodamos reikšmės, kurias reikia sujungti.
  3. Java įterpia skirtuką tik tarp reikšmių, ne pradžioje ir ne pabaigoje.
  4. join() grąžina naują String, todėl rezultatą galima išsaugoti kintamajame.

Kodėl join() yra statinis metodas?

join() kviečiamas per klasės pavadinimą String, nes metodui nereikia vieno konkretaus jau sukurto teksto objekto. Jis gauna skirtuką ir reikšmes kaip argumentus:

String tekstas = String.join(", ", "A", "B", "C");

Kairėje esantis String yra grąžinamos reikšmės tipas. String prieš tašką yra klasė, kuriai priklauso statinis metodas.

Metodo sintaksė

String.join() versijos
SintaksėPaskirtis
String.join(CharSequence delimiter, CharSequence... elements)Sujungia kelias atskirai perduotas reikšmes.
String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)Sujungia reikšmes iš kolekcijos, pavyzdžiui, List<String>.

Abi versijos grąžina naują String. CharSequence reiškia, kad metodas gali priimti ne tik String, bet ir kitus tekstą aprašančius tipus, pavyzdžiui, StringBuilder.

Skirtukas valdo rezultatą

String suKableliu = String.join(", ", "obuoliai", "bananai", "kriaušės");
String suBruksniu = String.join(" - ", "pirmas", "antras", "trečias");
String beTarpu = String.join("", "J", "a", "v", "a");

System.out.println(suKableliu);
System.out.println(suBruksniu);
System.out.println(beTarpu);
Konsolės rezultatas

obuoliai, bananai, kriaušės
pirmas - antras - trečias
Java

  • ", " sukuria įprastą kableliais atskirtą sąrašą.
  • " - " tinka tekstui, kuriame norisi aiškesnio vizualaus atskyrimo.
  • Tuščias skirtukas "" sujungia tekstus be jokio tarpo tarp jų.

Kolekcijos sujungimas

import java.util.List;

List temos = List.of("kintamieji", "ciklai", "metodai");
String tekstas = String.join(" | ", temos);

System.out.println(tekstas);
Konsolės rezultatas

kintamieji | ciklai | metodai

Kai reikšmės jau saugomos kolekcijoje, jų nereikia rankiniu būdu imti po vieną. String.join() gali pereiti per Iterable reikšmes ir sudėti jas į vieną tekstą ta pačia tvarka.

Tuščias arba vieno elemento sąrašas

String tuscias = String.join(", ");
String vienas = String.join(", ", "Java");

System.out.println("[" + tuscias + "]");
System.out.println("[" + vienas + "]");
Konsolės rezultatas

[]
[Java]

  1. Kai nėra nė vieno jungiamo elemento, rezultatas yra tuščias tekstas.
  2. Kai yra vienas elementas, grąžinamas tas elementas be skirtuko.
  3. Skirtukas atsiranda tik tarp dviejų gretimų elementų.

Kas nutinka su null?

String tekstas = String.join(", ", "Java", null, "SQL");

System.out.println(tekstas);
Konsolės rezultatas

Java, null, SQL

Jei vienas iš jungiamų elementų yra null, Java į rezultatą įrašo tekstą null. Tai gali būti naudinga diagnostikai, bet naudotojui skirtame tekste dažnai geriau tokias reikšmes iš anksto pakeisti arba pašalinti.

Skirtukas negali būti null

String tekstas = String.join(null, "Java", "SQL");

System.out.println(tekstas);
Rezultatas

NullPointerException

Pirmasis argumentas yra privalomas skirtukas. Jei jis yra null, metodas negali nuspręsti, ką įterpti tarp reikšmių, todėl vykdymo metu įvyksta NullPointerException.

join() vietoje rankinio jungimo

String pirmas = "Java";
String antras = "Spring";
String trecias = "SQL";

String rankiniuBudu = pirmas + ", " + antras + ", " + trecias;
String suJoin = String.join(", ", pirmas, antras, trecias);

System.out.println(rankiniuBudu);
System.out.println(suJoin);
Konsolės rezultatas

Java, Spring, SQL
Java, Spring, SQL

Kai sujungiamos dvi ar trys aiškios reikšmės, + operatorius yra suprantamas. Kai reikšmių daugiau arba jos ateina iš kolekcijos, String.join() sumažina pasikartojimą ir padeda išvengti papildomo kablelio pabaigoje.

Kai reikia pradžios ir pabaigos simbolių

import java.util.StringJoiner;

StringJoiner joiner = new StringJoiner(", ", "[", "]");
joiner.add("Java");
joiner.add("Spring");
joiner.add("SQL");

System.out.println(joiner.toString());
Konsolės rezultatas

[Java, Spring, SQL]

String.join() moka įterpti skirtuką tarp elementų, bet neturi atskirų parametrų pradžios ir pabaigos tekstui. Kai reikia prefikso ir sufikso, patogu naudoti StringJoiner.

Dažnos klaidos

  • Pamirštama, kad pirmasis argumentas yra skirtukas, o ne pirmas sąrašo elementas.
  • Skirtukas perduodamas kaip null, todėl gaunamas NullPointerException.
  • Tikimasi, kad null elementai bus praleisti, nors jie įrašomi kaip tekstas null.
  • Bandoma perduoti kolekciją, kurios elementai nėra CharSequence tipo.
  • Naudojamas join(), kai reikia sudėtingesnio formatavimo; tokiu atveju gali labiau tikti String.format(), StringJoiner arba stream operacijos.

Kada naudoti String.join()?

String.join() rinkis tada, kai turi kelias tekstines reikšmes ir nori jas sujungti vienodu skirtuku. Metodas ypač tinka meniu punktams, žymoms, CSV tipo eilutėms, paprastiems sąrašams ir kolekcijų pavertimui į žmogui skaitomą tekstą.