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, CharSequence
java

Abychom 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 capacity
  • StringBuilder(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());
	}
}
java

Když 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 = ABCDEFGHIJK
java

Jaké 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);
	}
}
java

Výstup je následující:

ABCDEFGHIJK
java

insert()

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);
	}
}
java

Zde je výstup:

AFGHIJKBCDEFGHIJK
java

Celé čí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);
	}
}
java

Výstup vypadá následovně:

AFGHIJKE
java

reverse()

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);
	}
}
java

Zde je výstup:

EDCBA
java

delete()

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);
	}
}
java

Zde je výstup:

AE
java

capacity()

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());
	}
}
java

Výstup vypadá následovně:

16
16
34
java

ensureCapacity()

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());
	}
}
java

Zde je výstup:

16
16
34
34
70
java

Nejprve 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.

Přejít do hlavního menu