Elméleti alapozás

Java-nyelv néhány összetett adattípusa

 

StringBuilder és StringBuffer

 

A fejezet eredményes tanulmányozásához mindenképpen olvassuk el a Java-nyelv néhány összetett adattípusa - String című fejezetet és értsük meg a benne foglaltakat!

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A StringBuilder (és Stringbuffer) osztály hivatott kiküszöbölni a String osztály egyik kevésbé előnyös tulajdonságát: egy létrehozott String objektum megváltoztathatatlan, ha pedig ezt megkíséreljük, akkor róla másolatok fognak keletkezni, amelyek processzoridőt és további memóriát foglalnak le. Főként ezen problémák megoldására komponálták meg a StringBuilder (és Stringbuffer) osztályokat, amelyek tehát nagy és gyakran változó karakterfüzérek gyors elérését és manipulációját teszik lehetővé.

 

A StringBuilder és Stringbuffer osztályok lényegében azonos funkcionalitásúak, azzal a nem elhanyagolható különbséggel, hogy míg a StringBuffer képes együttdolgozni több programszálon futó, szinkronizált metódusokkal (synchronized methods), addig a StringBuilder osztály nem.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Az azonos funkcionalitás miatt a továbbiakban a StringBuilder osztályt használom fel a programozási példák bemutatásakor.

 

A StringBuilder objektum szintén karaktertömbben (char tomb[]) tárolja az információt, ám ezen tömb mérete már változtatható. A karakterek tömbindexe szintén 0-nál kezdődik.

 

Egy StringBuilder objektumot a szokásos módon a new paranccsal kell létrehoznunk. Ha méret nincs megadva vagy nem kitalálható, akkor a kezdőméret 16 karakternyi lesz...

 

StringBuilder sb = new StringBuilder();

 

...de megadhatunk kezdőméretet is...

 

StringBuilder sb = new StringBuilder(20);

 

...vagy konkrét karakterfüzért:

 

StringBuilder sb = new StringBuilder("Java");

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    StringBuilder sb = new StringBuilder("Java");
    System.out.println(sb);
    }
}

 

Végeredmény:

Java

 

Az objektum létrehozása után a StringBuilder osztály rendkívül széles körben alkalmazható, rugalmas, beépített metódusokkal áll rendelkezésre. Nézzünk meg néhányat a legfontosabbak közül. Kezdjük 2 olyan metódussal, amelyek nem érhetők el a String osztályban:

Ezeket a függvényeket külön is vizsgáljuk meg!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    StringBuilder sb1 = new StringBuilder();
    System.out.println(sb1.append("Cirbolya"));
    System.out.println(sb1.append(" és "));
    System.out.println(sb1.append("Borbolya"));
    System.out.println(sb1.insert(8, ", Füles"));
    }
}

 

Végeredmény:

Cirbolya

Cirbolya és

Cirbolya és Borbolya

Cirbolya, Füles és Borbolya

 

Érdekes lehetőség az úgynevezett utasítás-, vagy metódusláncolás (method chaining - például:  b1.append("F").append("ü").append("l")...):
 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    StringBuilder sb1 = new StringBuilder();
    System.out.println(sb1.append("F").append("ü").append("l").append("e").append("s"));
    }
}

 

Végeredmény:

Fúles

 

A további függvények hasonlóak a String osztályban is elérhetőkhöz:

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    StringBuilder sb1 = new StringBuilder("Cirbolya és Borbolya");
    String sb2 = new String("Cirbolya");
    System.out.println(sb1.equals(sb2));
    System.out.println(sb1.length());
    System.out.println(sb1.indexOf("C"));
    System.out.println(sb1.charAt(0));
    System.out.println(sb1.substring(9, 11));
    System.out.println(sb1.replace(0, 8, "Füles"));
    System.out.println(sb2.compareTo("Cirbolya"));
    System.out.println(sb2.concat(" és barátai"));
    }
}

 

Végeredmény:

false

20

0

C

és

Füles és Borbolya

0 (azaz hasonlóak)

Cirbolya és barátai

 

További, csakis a StringBuilder osztályban elérhető metódusok (a teljesség igény nélkül):

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    StringBuilder sb1 = new StringBuilder("Cirbolya és Borbolya");
    System.out.println(sb1.subSequence(0, 8));
    System.out.println(sb1.delete(0, 12));
    System.out.println(sb1.toString());
    }
}

 

Végeredmény:

Cirbolya

Borbolya

Borbolya