Java-kielen String­Buil­der-luokkaa voidaan käyttää pe­rin­teis­ten merk­ki­jo­no­jen sijaan. Toisin kuin pe­rin­tei­set merk­ki­jo­not, String­Buil­der mah­dol­lis­taa merk­ki­jo­non muut­ta­mi­sen ilman uuden objektin luomista. Muutokset voidaan tehdä eri me­ne­tel­mil­lä.

Mikä on Java-kielessä String­Buil­der?

Java-kielessä string-luokka on muut­tu­ma­ton eikä sillä ole ala­luok­kia. Yksi vaih­toeh­to tälle lo­pul­li­sel­le luokalle on Java-kielen String­Buil­der. Se luo merk­ki­jo­non, jota voidaan muuttaa sen luomisen jälkeen. Tällä tavalla Java-kielen String­Buil­der on sa­man­lai­nen kuin String­Buf­fer. Näillä kahdella luokalla on sa­man­lai­nen tarkoitus, mutta toisin kuin pus­ku­riop­tio, String­Buil­der ei ole synk­ro­noi­tu. Tämä tekee String­Buil­de­ris­ta hyvän valinnan, kun työs­ken­te­let yk­sit­täis­ten säikeiden kanssa, koska se on paljon nopeampi kuin String­Buf­fer. Tässä ope­tus­oh­jel­mas­sa esit­te­lem­me sinulle Java-kielen String­Buil­de­rin ja näytämme sinulle joitakin sen monista käyt­tö­ta­vois­ta.

Mikä on Java-kielen String­Buil­der-luokan syntaksi?

Java-kielisen String­Buil­der-luokan syntaksi noudattaa aina samaa mallia, joka näyttää tältä:

public final class StringBuilder
	extends Object
		implements Serializable, CharSequence
java

Jotta ym­mär­täi­sit luokan toiminnan perusteet ja sen tar­koi­tuk­sen, on hyö­dyl­lis­tä tar­kas­tel­la ensin pe­rin­teis­tä String-luokkaa. Kun olet mää­rit­tä­nyt objektin String-luokassa, et voi enää muuttaa sitä. Jos haluat tehdä muutoksia, sinun on luotava ja tal­len­net­ta­va kokonaan uusi objekti. Tämä aiheuttaa paljon da­ta­jä­tet­tä ja voi heikentää suo­ri­tus­ky­kyä. Jos käytät sen sijaan String­Buil­de­ria Javassa, voit tehdä muutoksia merk­ki­jo­noi­hin luomatta uutta. Tämä vähentää hukkaa ja parantaa suo­ri­tus­ky­kyä.

Mitkä ovat Java-kielen String­Buil­der-luokan kon­struk­to­rit?

Java:n String­Buil­der-luokka sisältää neljä kon­struk­to­ria, jotka auttavat muun­ta­maan merk­ki­jo­non luokalle sopivaan muotoon. Niitä käytetään myös kon­fi­gu­roin­tiin. Tässä ovat neljä kon­struk­to­ria ja niiden käyt­tö­tar­koi­tuk­set:

  • StringBuilder(): Luo tyhjän String­Buil­der-objektin, jonka enim­mäis­ka­pa­si­teet­ti on 16 merkkiä
  • StringBuilder(int capacity): Luo merk­ki­jo­non, jossa ei ole merkkejä ja jonka enim­mäis­ka­pa­si­teet­ti mää­ri­te­tään capacity-ar­gu­men­til­la
  • StringBuilder(CharSequence seq): Luo merk­ki­jo­non, jossa on samat merkit kuin tal­len­ne­tus­sa merk­ki­jo­nos­sa
  • StringBuilder(String str): Luo String­Buil­der-luokan, jossa on syöt­tä­mä­si merk­ki­jo­no

Kat­so­taan­pa esi­merk­kiä, jossa näemme, miten nämä kon­struk­to­rit toimivat käy­tän­nös­sä:

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

Kun käytämme Java-komentoa System.out.println tuloksen saa­mi­sek­si, saamme seuraavan tuloksen:

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

Mitä me­ne­tel­miä käytetään String­Buil­de­rin kanssa Java-kielessä?

Java-luokan String­Buil­der kanssa voidaan käyttää useita me­ne­tel­miä. Alla esit­te­lem­me joitakin tär­keim­piä me­ne­tel­miä koo­die­si­merk­kien kera.

append()

append() etelmää käytetään yhden merk­ki­jo­non li­sää­mi­seen toiseen. Siinä on useita pa­ra­met­re­ja. Näin se toimii käy­tän­nös­sä:

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

Tulostus on seuraava:

ABCDEFGHIJK
java

insert()

insert() käytetään yhdessä Java-kielisen String­Buil­der-luokan kanssa merk­ki­jo­non li­sää­mi­sek­si tiettyyn kohtaan. Tässä on esimerkki sen toi­min­nas­ta:

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

Tässä on tulos:

AFGHIJKBCDEFGHIJK
java

Ko­ko­nais­lu­kua (tässä ta­pauk­ses­sa 1) käytetään mää­rit­tä­mään sijainti, johon merk­ki­jo­no lisätään.

replace()

replace() korvaa merk­ki­jo­non tai osan merk­ki­jo­nos­ta. Se mää­ri­tel­lään käyt­tä­mäl­lä beginIndex ja endIndex. Näin se toimii käy­tän­nös­sä:

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

Tulostus näyttää seu­raa­val­ta:

AFGHIJKE
java

reverse()

reverse() -me­ne­tel­mää käytetään tal­len­ne­tun merk­ki­jo­non kään­tä­mi­seen kään­tei­seen jär­jes­tyk­seen. Se toimii seu­raa­vas­ti:

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

Tässä on tulos:

EDCBA
java

delete()

Voit käyttää delete() me­ne­tel­mää Java-kielisen String­Buil­der-luokan kanssa pois­taak­se­si merk­ki­jo­non kokonaan tai osittain. Jos haluat poistaa osan merk­ki­jo­nos­ta, voit tehdä sen beginIndex ja endIndex avulla.

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

Tässä on tulos:

AE
java

capacity()

capacity() antaa sinulle String­Buil­de­rin nykyisen enim­mäis­merk­ki­mää­rän. Se on yleensä 16. Jos sitä lisätään, se tehdään yleensä kaavalla “nykyinen merk­ki­mää­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 esi­mer­kis­säm­me:

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

Tulostus näyttää seu­raa­val­ta:

16
16
34
java

ensureCapacity()

ensureCapacity() varmistaa, että käy­tet­tä­vis­sä olevien merkkien määrä on vähintään mää­ri­tel­ty arvo. Jos näin ei ole, ka­pa­si­teet­tia lisätään käyt­tä­mäl­lä yllä olevaa kaavaa, ”nykyinen merk­ki­mää­rä * 2 + 2”. Tämä näkyy seu­raa­vas­sa esi­mer­kis­sä:

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

Tässä on tulos:

16
16
34
34
70
java

Ensin näemme va­kio­ar­von (16), sitten kyseisen arvon ker­rot­tu­na 2:lla ja lisättynä 2:een (34) ja lopuksi uuden arvon ker­rot­tu­na 2:lla ja lisättynä 2:een.

Siirry pää­va­lik­koon