Java’s String­Bu­il­der-klasse kan bruges i stedet for tra­di­tio­nel­le strenge. I mod­sæt­ning til tra­di­tio­nel­le strenge giver String­Bu­il­der dig mulighed for at foretage ændringer i en streng uden at oprette et nyt objekt. Æn­drin­ger­ne kan foretages ved hjælp af for­skel­li­ge metoder.

Hvad er Java’s String­Bu­il­der?

String-klassen i Java er ufor­an­der­lig og har ingen un­der­klas­ser. Et al­ter­na­tiv til denne endelige klasse er Java’s String­Bu­il­der. Den opretter en sekvens af tegn, der kan ændres, efter at den er oprettet. På denne måde ligner Java’s String­Bu­il­der String­Buf­fer. De to klasser har et lignende formål, men i mod­sæt­ning til buffer-optionen er String­Bu­il­der ikke syn­kro­ni­se­ret. Det gør String­Bu­il­der til et godt valg, når man arbejder med enkelt-tråde, da det er meget hurtigere end String­Buf­fer. I denne tutorial in­tro­du­ce­rer vi dig til String­Bu­il­der i Java og viser dig nogle af dens mange an­ven­del­ses­mu­lig­he­der.

Hvad er syntaksen for Java’s String­Bu­il­der?

Syntaksen i Java’s String­Bu­il­der følger altid det samme mønster, som ser således ud:

public final class StringBuilder
	extends Object
		implements Serializable, CharSequence
java

For at forstå grund­læg­gen­de, hvordan klassen fungerer, og hvilket formål den tjener, er det en god idé først at se på den tra­di­tio­nel­le String-klasse. Når du har de­kla­re­ret et objekt i String, kan du ikke længere ændre det objekt. Hvis du vil foretage ændringer, skal du oprette og gemme et helt nyt objekt. Dette skaber en masse dataspild og kan føre til nedsat ydeevne. Hvis du i stedet bruger String­Bu­il­der i Java, kan du foretage ændringer i strenge uden at oprette en ny. Dette reducerer spild og forbedrer ydeevnen.

Hvad er kon­struk­tø­rer­ne for Java’s String­Bu­il­der?

Java’s String­Bu­il­der har 4 kon­struk­tø­rer, der hjælper med at kon­ver­te­re strengen til det rigtige format for klassen. De bruges også til kon­fi­gu­ra­tion. Her er de fire kon­struk­tø­rer og deres formål:

  • StringBuilder(): Genererer en tom String­Bu­il­der med en maksimal kapacitet på 16 tegn
  • StringBuilder(int capacity): Opretter en String­Bu­il­der uden tegn, hvis maksimale kapacitet er defineret ved hjælp af ka­pa­ci­tets­ar­gu­men­tet
  • StringBuilder(CharSequence seq): Genererer en string builder med de samme tegn som den gemte tegn­se­kvens
  • StringBuilder(String str): Opretter en String­Bu­il­der med den streng, du indtaster

Lad os se på et eksempel for at se, hvordan disse kon­struk­tø­rer fungerer i praksis:

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

Når vi bruger Java-kom­man­do­en System.out.println til at få outputtet, får vi følgende:

First constructor = ABC
Second constructor = 5
Third constructor = ABCDEFGHIJK
Fourth constructor = ABCDEFGHIJK
java

Hvilke metoder bruges med String­Bu­il­der i Java?

Der findes en række metoder, der kan bruges med Java’s String­Bu­il­der-klasse. Nedenfor in­tro­du­ce­rer vi nogle af de vigtigste med ko­de­ek­semp­ler.

append()

Metoden append() bruges til at tilføje en streng til en anden. Den har for­skel­li­ge parametre. Sådan fungerer den i praksis:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.append("FGHIJK");
	System.out.println(str);
	}
}
java

Outputtet er som følger:

ABCDEFGHIJK
java

insert()

Metoden insert() bruges i kom­bi­na­tion med Java’s String­Bu­il­der til at indsætte en streng på et bestemt sted. Her er et eksempel på, hvordan det fungerer:

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

Her er re­sul­ta­tet:

AFGHIJKBCDEFGHIJK
java

Heltallet (i dette tilfælde 1) bruges til at definere den position, hvor strengen skal indsættes.

replace()

Metoden replace() erstatter en streng eller en del af en streng. Den defineres ved hjælp af beginIndex og endIndex. Sådan fungerer det i praksis:

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

Re­sul­ta­tet ser således ud:

AFGHIJKE
java

reverse()

Metoden reverse() bruges til at placere den gemte streng i omvendt ræk­ke­føl­ge. Sådan fungerer det:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.reverse();
	System.out.println(str);
	}
}
java

Her er re­sul­ta­tet:

EDCBA
java

delete()

Du kan bruge metoden delete() med Java’s String­Bu­il­der til at slette hele eller en del af en streng. Hvis du vil slette en del af strengen, kan du gøre det med beginIndex og 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

Her er re­sul­ta­tet:

AE
java

capacity()

Metoden capacity() giver dig det aktuelle maksimale tegnantal for String­Bu­il­der. Det er normalt 16. Hvis det øges, sker det normalt ved hjælp af formlen ‘aktuelt tegnantal * 2 + 2’. Så hvis det i øje­blik­ket er 16, ganges det med 2 (32) og derefter lægges 2 til. Det kan du se i vores eksempel:

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

Re­sul­ta­tet ser således ud:

16
16
34
java

ensureCapacity()

Metoden ensureCapacity() sikrer, at antallet af til­gæn­ge­li­ge tegn mindst svarer til den de­fi­ne­re­de værdi. Hvis dette ikke er tilfældet, øges ka­pa­ci­te­ten ved hjælp af formlen ovenfor, ‘aktuel tegnantal * 2 + 2’. Dette kan ses i følgende eksempel:

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

Her er re­sul­ta­tet:

16
16
34
34
70
java

Først ser vi stan­dard­vær­di­en (16), derefter den værdi ganget med 2 og lagt til 2 (34), og til sidst den nye værdi ganget med 2 og lagt til 2.

Gå til ho­ved­me­nu­en