# Java-kielisen StringBuilder-luokan käyttö

Java-kielen StringBuilder-luokkaa voidaan käyttää perinteisten merkkijonojen sijaan. Toisin kuin perinteiset merkkijonot, StringBuilder mahdollistaa merkkijonon muuttamisen ilman uuden objektin luomista. Muutokset voidaan tehdä eri menetelmillä.

## Mikä on Java-kielessä StringBuilder?

[Java-kielessä string-luokka](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/java-merkkijonot-1/) on muuttumaton eikä sillä ole alaluokkia. Yksi vaihtoehto tälle lopulliselle luokalle on Java-kielen StringBuilder. Se luo merkkijonon, jota **voidaan muuttaa sen luomisen jälkeen**. Tällä tavalla Java-kielen StringBuilder on samanlainen kuin StringBuffer. Näillä kahdella luokalla on samanlainen tarkoitus, mutta toisin kuin puskurioptio, StringBuilder ei ole synkronoitu. Tämä tekee StringBuilderista hyvän valinnan, kun työskentelet yksittäisten säikeiden kanssa, koska se on paljon nopeampi kuin StringBuffer. Tässä opetusohjelmassa esittelemme sinulle Java-kielen StringBuilderin ja näytämme sinulle joitakin sen monista käyttötavoista.

## Mikä on Java-kielen StringBuilder-luokan syntaksi?

Java-kielisen StringBuilder-luokan syntaksi noudattaa aina samaa mallia, joka näyttää tältä:

```java
public final class StringBuilder
	extends Object
		implements Serializable, CharSequence
```

Jotta ymmärtäisit luokan toiminnan perusteet ja sen tarkoituksen, on hyödyllistä tarkastella ensin perinteistä String-luokkaa. Kun olet määrittänyt objektin String-luokassa, et voi enää muuttaa sitä. Jos haluat tehdä muutoksia, sinun on luotava ja tallennettava kokonaan uusi objekti. Tämä aiheuttaa paljon datajätettä ja voi heikentää suorituskykyä. Jos käytät sen sijaan StringBuilderia Javassa, voit tehdä muutoksia merkkijonoihin **luomatta uutta**. Tämä vähentää hukkaa ja parantaa suorituskykyä.

## Mitkä ovat Java-kielen StringBuilder-luokan konstruktorit?

Java:n StringBuilder-luokka sisältää neljä konstruktoria, jotka auttavat **muuntamaan merkkijonon luokalle sopivaan muotoon**. Niitä käytetään myös konfigurointiin. Tässä ovat neljä konstruktoria ja niiden käyttötarkoitukset:

- `StringBuilder()`: Luo tyhjän StringBuilder-objektin, jonka enimmäiskapasiteetti on 16 merkkiä
- `StringBuilder(int capacity)`: Luo merkkijonon, jossa ei ole merkkejä ja jonka enimmäiskapasiteetti määritetään capacity-argumentilla
- `StringBuilder(CharSequence seq)`: Luo merkkijonon, jossa on samat merkit kuin tallennetussa merkkijonossa
- `StringBuilder(String str)`: Luo StringBuilder-luokan, jossa on syöttämäsi merkkijono

Katsotaanpa esimerkkiä, jossa näemme, miten nämä konstruktorit toimivat käytännössä:

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

Kun käytämme Java-komentoa `System.out.println` tuloksen saamiseksi, saamme seuraavan tuloksen:

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

## Mitä menetelmiä käytetään StringBuilderin kanssa Java-kielessä?

Java-luokan StringBuilder kanssa voidaan käyttää useita menetelmiä. Alla esittelemme joitakin tärkeimpiä menetelmiä koodiesimerkkien kera.

### `append()`

`append()` etelmää käytetään yhden merkkijonon lisäämiseen toiseen. Siinä on useita parametreja. Näin se toimii käytännössä:

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

Tulostus on seuraava:

```java
ABCDEFGHIJK
```

### `insert()`

`insert()` käytetään yhdessä Java-kielisen StringBuilder-luokan kanssa merkkijonon lisäämiseksi tiettyyn kohtaan. Tässä on esimerkki sen toiminnasta:

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

Tässä on tulos:

```java
AFGHIJKBCDEFGHIJK
```

Kokonaislukua (tässä tapauksessa 1) käytetään määrittämään sijainti, johon merkkijono lisätään.

### `replace()`

`replace()` korvaa merkkijonon tai osan merkkijonosta. Se määritellään käyttämällä `beginIndex` ja `endIndex`. Näin se toimii käytännössä:

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

Tulostus näyttää seuraavalta:

```java
AFGHIJKE
```

### `reverse()`

`reverse()` -menetelmää käytetään tallennetun merkkijonon kääntämiseen käänteiseen järjestykseen. Se toimii seuraavasti:

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

Tässä on tulos:

```java
EDCBA
```

### `delete()`

Voit käyttää `delete()` menetelmää Java-kielisen StringBuilder-luokan kanssa poistaaksesi merkkijonon kokonaan tai osittain. Jos haluat poistaa osan merkkijonosta, voit tehdä sen `beginIndex` ja `endIndex` avulla.

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

Tässä on tulos:

```java
AE
```

### `capacity()`

`capacity()` antaa sinulle StringBuilderin **nykyisen enimmäismerkkimäärän**. Se on yleensä 16. Jos sitä lisätään, se tehdään yleensä kaavalla “nykyinen merkkimäärä \* 2 + 2”. Jos se on siis tällä hetkellä 16, se kerrotaan 2:lla (32) ja siihen lisätään 2. Voit nähdä sen esimerkissämme:

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

Tulostus näyttää seuraavalta:

```java
16
16
34
```

### `ensureCapacity()`

`ensureCapacity()` varmistaa, että **käytettävissä olevien merkkien määrä on vähintään määritelty arvo**. Jos näin ei ole, kapasiteettia lisätään käyttämällä yllä olevaa kaavaa, ”nykyinen merkkimäärä \* 2 + 2”. Tämä näkyy seuraavassa esimerkissä:

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

Tässä on tulos:

```java
16
16
34
34
70
```

Ensin näemme vakioarvon (16), sitten kyseisen arvon kerrottuna 2:lla ja lisättynä 2:een (34) ja lopuksi uuden arvon kerrottuna 2:lla ja lisättynä 2:een.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/java-stringbuilder/](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/java-stringbuilder/) for AI/LLM consumption.