Jak používat StringBuilder v Javě
Třídu StringBuilder jazyka Java lze použít namísto tradičních řetězců. Na rozdíl od tradičních řetězců umožňuje StringBuilder provádět změny v řetězci bez vytváření nového objektu. Změny lze provádět pomocí různých metod.
Co je StringBuilder v Javě?
Třída string v Javě je neměnná a nemá žádné podtřídy. Jednou z alternativ k této finální třídě je StringBuilder v Javě. Vytváří sekvenci znaků, kterou lze po vytvoření měnit. V tomto ohledu je StringBuilder v Javě podobný StringBuffer. Obě třídy mají podobný účel, ale na rozdíl od bufferu není StringBuilder synchronizován. Díky tomu je StringBuilder dobrou volbou při práci s jedním vláknem, protože je mnohem rychlejší než StringBuffer. V tomto tutoriálu vám představíme StringBuilder v Javě a ukážeme vám některé z jeho mnoha použití.
Jaká je syntaxe StringBuilderu v Javě?
Syntaxe StringBuilder v Javě vždy sleduje stejný vzor, který vypadá takto:
public final class StringBuilder
extends Object
implements Serializable, CharSequencejavaAbychom pochopili základní principy fungování této třídy a její účel, je užitečné se nejprve podívat na tradiční třídu String. Jakmile deklarujete objekt ve třídě String, již jej nemůžete měnit. Pokud chcete provést změny, musíte vytvořit a uložit zcela nový objekt. To vede k velkému plýtvání daty a může způsobit snížení výkonu. Pokud místo toho použijete StringBuilder v Javě, můžete provádět změny v řetězcích, aniž byste museli vytvářet nový. Tím se sníží plýtvání a zlepší se výkon.
Jaké jsou konstruktory pro StringBuilder v Javě?
Java StringBuilder má 4 konstruktory, které pomáhají převést řetězec do správného formátu pro třídu. Používají se také pro konfiguraci. Zde jsou čtyři konstruktory a jejich účely:
StringBuilder(): Vytvoří prázdný StringBuilder s maximální kapacitou 16 znakůStringBuilder(int capacity): Vytvoří StringBuilder bez znaků, jehož maximální kapacita je definována pomocí argumentu capacityStringBuilder(CharSequence seq): Vytvoří řetězec se stejnými znaky jako uložená sekvence znakůStringBuilder(String str): Vytvoří StringBuilder s řetězcem, který zadáte
Podívejme se na příklad, jak tyto konstruktory fungují v praxi:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder();
str.append("ABC");
System.out.println("First constructor = " + str.toString());
StringBuilder str2 = new StringBuilder(5);
System.out.println("Second constructor = " + str2.capacity());
StringBuilder str3 = new StringBuilder("ABCDEFGHIJK");
System.out.println("Third constructor = " + str3.toString());
StringBuilder str4 = new StringBuilder(str3.toString());
System.out.println("Fourth constructor = " + str4.toString());
}
}javaKdyž použijeme příkaz Java System.out.println k získání výstupu, dostaneme následující:
First constructor = ABC
Second constructor = 5
Third constructor = ABCDEFGHIJK
Fourth constructor = ABCDEFGHIJKjavaJaké metody se používají se StringBuilder v Javě?
Existuje řada metod, které lze použít s třídou StringBuilder jazyka Java. Níže představujeme některé z nejdůležitějších z nich spolu s příklady kódu.
append()
Metoda append() se používá k přidání jednoho řetězce k druhému. Má různé parametry. Takto funguje v praxi:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder("ABCDE");
str.append("FGHIJK");
System.out.println(str);
}
}javaVýstup je následující:
ABCDEFGHIJKjavainsert()
Metoda insert() se používá v kombinaci s Java StringBuilder k vložení řetězce na konkrétní místo. Zde je příklad, jak to funguje:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder("ABCDE");
str.insert(1,"FGHIJK");
System.out.println(str);
}
}javaZde je výstup:
AFGHIJKBCDEFGHIJKjavaCelé číslo (v tomto případě 1) se používá k definování pozice, na kterou bude řetězec vložen.
replace()
Metoda replace() nahrazuje řetězec nebo část řetězce. Je definována pomocí beginIndex a endIndex. Takto to funguje v praxi:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder("ABCDE");
str.replace(1,4,"FGHIJK");
System.out.println(str);
}
}javaVýstup vypadá následovně:
AFGHIJKEjavareverse()
Metoda reverse() se používá k obrácení pořadí uloženého řetězce. Funguje to takto:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder("ABCDE");
str.reverse();
System.out.println(str);
}
}javaZde je výstup:
EDCBAjavadelete()
Metodu delete() můžete použít s StringBuilderem v Javě k odstranění celého řetězce nebo jeho části. Pokud chcete odstranit část řetězce, můžete to provést pomocí beginIndex a endIndex.
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder("ABCDE");
str.delete(1,4);
System.out.println(str);
}
}javaZde je výstup:
AEjavacapacity()
Metoda capacity() vám poskytne aktuální maximální počet znaků pro StringBuilder. Obvykle je to 16. Pokud se zvyšuje, obvykle se to provádí pomocí vzorce „aktuální počet znaků * 2 + 2“. Pokud je tedy aktuálně 16, vynásobí se 2 (32) a poté se k němu přidá 2. To můžete vidět v našem příkladu:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder();
System.out.println(str.capacity());
str.append("ABCDE");
System.out.println(str.capacity());
str.append("This is another example");
System.out.println(str.capacity());
}
}javaVýstup vypadá následovně:
16
16
34javaensureCapacity()
Metoda ensureCapacity() zajišťuje, že počet dostupných znaků je alespoň rovný definované hodnotě. Pokud tomu tak není, kapacita se zvýší pomocí výše uvedeného vzorce „aktuální počet znaků * 2 + 2“. To můžete vidět na následujícím příkladu:
public class Main {
public static void main(String[] argv) throws Exception {
StringBuilder str = new StringBuilder();
System.out.println(str.capacity());
str.append("ABCDE");
System.out.println(str.capacity());
str.append("This is another example");
System.out.println(str.capacity());
str.ensureCapacity(5);
System.out.println(str.capacity());
str.ensureCapacity(40);
System.out.println(str.capacity());
}
}javaZde je výstup:
16
16
34
34
70javaNejprve vidíme standardní hodnotu (16), poté tuto hodnotu vynásobenou 2 a přičtenou k 2 (34) a nakonec tuto novou hodnotu vynásobenou 2 a přičtenou k 2.