JAVA PAGRINDAI DETALIAU
Java StringBuilder
StringBuilder yra keičiama simbolių seka. Ji patogi, kai tekstą reikia papildyti ar redaguoti daug kartų, nes nereikia po kiekvieno pakeitimo kurti naujo String objekto.
String ir StringBuilder skirtumas
String objektas yra nekeičiamas. Prie teksto pridėjus naują dalį, sukuriamas naujas String objektas. StringBuilder savo turinį gali keisti tame pačiame objekte.
| Savybė | String | StringBuilder |
|---|---|---|
| Turinys | Nekeičiamas | Keičiamas |
| Paprastas tekstas | Labai tinkamas | Dažnai nereikalingas |
| Daug pakeitimų | Gali kurti daug tarpinių objektų | Keičia vieną kaupiamą turinį |
| Dažnas naudojimas | Pastovus ar retai keičiamas tekstas | Teksto kūrimas cikle |
Pirmasis StringBuilder
StringBuilder tekstas = new StringBuilder();
tekstas.append("Labas");
tekstas.append(" ");
tekstas.append("Rūta");
tekstas.append("!");
System.out.println(tekstas);Labas Rūta!
new StringBuilder()sukuria tuščią teksto kūrimo objektą.append()prideda naują reikšmę turinio pabaigoje.- Tarpą reikia pridėti pačiam, nes Java jo neįterpia automatiškai.
println()gali tiesiogiai parodyti sukauptą turinį.
Tas pats objektas keičiamas kelis kartus
StringBuilder sarasas = new StringBuilder("Duona");
sarasas.append(", pienas");
System.out.println(sarasas);
sarasas.append(", obuoliai");
System.out.println(sarasas);Duona, pienas
Duona, pienas, obuoliai
Abu append() iškvietimai papildo tą patį sarasas objektą. Tai esminis skirtumas nuo String, kur kiekvienas sujungimas pateikia naują teksto objektą.
Teksto įterpimas, keitimas ir šalinimas
StringBuilder tekstas = new StringBuilder("Kava skani");
tekstas.insert(5, "labai ");
System.out.println(tekstas);
tekstas.replace(0, 4, "Arbata");
System.out.println(tekstas);
tekstas.delete(7, 13);
System.out.println(tekstas);Kava labai skani
Arbata labai skani
Arbata skani
insert(5, "labai ")įterpia tekstą nuo indekso5.replace(0, 4, "Arbata")pakeičia simbolius nuo indekso0iki4, jo neįtraukiant.delete(7, 13)pašalina žodį ir tarpą nurodytame intervale.
Metodų grandinė ir toString()
String vardas = "Mantas";
int taskai = 18;
String zinute = new StringBuilder()
.append(vardas)
.append(" surinko ")
.append(taskai)
.append(" taškų.")
.toString();
System.out.println(zinute);Mantas surinko 18 taškų.
Kadangi append() grąžina tą patį StringBuilder, kitą metodą galima kviesti iš karto. Baigus kurti tekstą, toString() jį paverčia įprastu String.
StringBuilder cikle
Ciklas yra viena dažniausių vietų, kur StringBuilder iš tiesų naudingas:
String[] produktai = {"duona", "pienas", "obuoliai"};
StringBuilder sarasas = new StringBuilder();
for (int i = 0; i < produktai.length; i++) {
if (i > 0) {
sarasas.append(", ");
}
sarasas.append(produktai[i]);
}
System.out.println(sarasas);duona, pienas, obuoliai
- Ciklas po vieną aplanko visus produktus.
- Nuo antro produkto prieš pavadinimą pridedamas kablelis ir tarpas.
- Kiekvienas produktas pridedamas į tą patį
StringBuilder. - Pasibaigus ciklui visas sąrašas išspausdinamas vieną kartą.
reverse() ir length()
StringBuilder zodis = new StringBuilder("labas");
zodis.reverse();
System.out.println(zodis);
System.out.println(zodis.length());sabal
5
reverse() apverčia simbolių tvarką tame pačiame objekte. length() grąžina šiuo metu saugomų simbolių skaičių.
Kada rinktis StringBuilder?
- kai tekstą kuri cikle;
- kai vieną tekstą daug kartų papildai, įterpi, pakeiti ar trumpini;
- kai iš daugelio atskirų reikšmių formuoji vieną rezultatą.
Eilutė String zinute = "Labas, " + vardas; yra aiški ir tinkama. StringBuilder didžiausią naudą suteikia tada, kai operacijos kartojamos daug kartų.
StringBuilder nėra sinchronizuotas ir nėra skirtas tam pačiam objektui saugiai keisti iš kelių gijų. Tokiam specialiam atvejui egzistuoja StringBuffer, tačiau įprastame vienos gijos kode dažniausiai pasirenkamas StringBuilder.

