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
Tühi
StringBuilder
StringBuilder sb = new StringBuilder();
Määratud algmahuga
StringBuilder
StringBuilder sb = new StringBuilder(32);
Unicode karakteritega alaväärtustatud
StringBuilder
CharSequence str= "Espresso";
StringBuilder sb = new StringBuilder(str);
String-iga algväärtustatudStringBuilder
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.
reverse() – sõne ümberpööramine
StringBuilder sb = new StringBuilder("AbstractSingletonProxyFactoryBean");
StringBuilder reverseSb = sb.reverse();
System.out.println(reverseSb.toString());
või kasutades ära muudetava andmetüübi eripära:
StringBuilder sb = new StringBuilder("AbstractSingletonProxyFactoryBean");
sb.reverse();
System.out.println(sb.toString())
Väljund
naeByrotcaFxyPorPnotelgniStcartsbA
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.