StringBuilder

String vs StringBuilder

Muutumatu ja muudetav andmetüüp

String on Javas muutumatu andmetüüp. String-i muutmiseks on vaja luua uus String.

String word = pepperoni;
word.replace('r', 'n');
System.out.println(word);  // pepperoni

Vaja on

String word = "pepperoni";
String newWord = word.replace('r', 'n');
System.out.println(newWord);  // peppenoni

StringBuilder on muudetav andmetüüp, mis tagastab StringBuilder-i niikaua kuni teda pole teisendatud String-iks või CharSequence -iks (näiteks toString, substring või chars meetodite kaudu).

StringBuilder builder = new StringBuilder("pepperoni");
builder.replace(6, 7, "d");
System.out.println(builder);;  // peppenoni

Mälukasutus

StringBuilder-it eelistatakse vähemate objektiloomiste tõttu String-i klassile ka failitöötluses, JSON-i kirjutamisel ning muudes operatsioonides, kus pole vajadust vaheobjekte kasutada. Mälukasutust saab StringBuilder-is suurendada ka setLength(0) meetodiga, mis StringBuilder-i tühjendab ja taaskasutavaks teeb.

Method Chaining

method chaining on mitme meetodi järjestikune kasutamine ühel real:

StringBuilder sb = new StringBuilder();

String[] exceptions = {"NullPointer", "IO", "FileNotFound", "StackOverflow"};

for (String e : exceptions) {
   sb.append("You have: ").append(e).append("Exception").append(" again").append("\n");
}
System.out.println(sb);

Väljund:

You have: NullPointerException again
You have: IOException again
You have: FileNotFoundException again
You have: StackOverflowException again

StringBuilderi loomine

  1. Tühi StringBuilder

StringBuilder sb = new StringBuilder();
  1. Määratud algmahuga StringBuilder

StringBuilder sb = new StringBuilder(32);
  1. Unicode karakteritega alaväärtustatud StringBuilder

CharSequence str= "Espresso";
StringBuilder sb = new StringBuilder(str);
  1. String-iga algväärtustatud StringBuilder

String str= "Cappuccino";
StringBuilder sb = new StringBuilder(str);

või otse

StringBuilder sb = new StringBuilder(Cappuccino);

StringBuilderisse sõnede lisamine

append() – sõnede lisamine StringBuilderi lõppu


StringBuilder builder = new StringBuilder();
LongStream.rangeClosed(0, 5).forEach(e -> {

   builder.append(e);

   if (e % 2 == 0) {
       builder.append("peppe");
   }
   if (e < 5) {
       builder.append("ro");
   } else {
       builder.append("ni");
   }
});
System.out.println(builder);  // 0peppero1ro2peppero3ro4peppero5ni

insert() – sõnede lisamine määratud asukohta

StringBuilder builder = new StringBuilder("Alexander and Day.");
 builder.insert(14, "the Terrible, Horrible, No Good, Very Bad ");
 System.out.println(builder);

Väljund

Alexander and the Terrible, Horrible, No Good, Very BadDay.

StringBuilder vs StringBuffer

StringBuffer on sünkroniseeritud (thread-safe) StringBuilder, mistõttu on StringBuffer` ka aeglasem, kuid``multithreading``-uga programmis tagab StringBuffer`, et mitu thread-i ei muudaks sama String-i korraga.

../_images/stringbuilder.png

Javadoci ametlik dokumentatsioon StringBuilderist