Pemrograman Lanjut
Objectives
Mampu memahami dan mengimplementasikan
tentang
Class String
Class String Buffer
Class String
Di dalam java, String adalah object
Object String dapat dibuat dengan salah satu dari 2 cara, yaitu :
Penulisan sesuatu di dalam tanda antara petik ganda (literal String).
String s = ”Halo”;
Pembuatan object String dengan keyword new. String s = new String(“Halo”);
Kelas java.lang.String bermodifier final, sehingga tidak dapat diturunkan
String dan Memory
Dalam java, dikenal 2 buah jenis memory, yaitu:
Stack (tempat local variable dan tumpukan method)
Heap (tempat instance variable dan object)
Di dalam heap terdapat bagian memory yang disebut dengan String constant pool
String dan Memory
object String dengan penulisan sesuatu di antara tanda petik ganda (literal String) berada di dalam
String constant pool
Contoh : String s = ”Halo”;
object String dengan keyword new berada di dalam heap (tetapi diluar String constant pool) Contoh : String s = new String(”Halo”);
String dengan keyword new
Khusus untuk pembuatan object String dengan keyword new (String s = new String(“Halo”) ), sebenarnya terdiri dari 3 buah proses, yaitu
Pembuatan object String “Halo” di dalam String constant pool. Hal ini karena “Halo” adalah literal String yang otomatis membuat object di String constant pool.
Pembuatan object String “Halo” di dalam heap (non pool).
Penghapusan object String “Halo” di dalam String
constant pool (bila tidak ada yang mereferensi String) ini.
Pada saat java menjumpai literal String (dalam kode program), maka java akan mencari String yang sama dengan literal String tersebut di
dalam String constant pool. Bila ternyata di
dalam pool ditemukan object String yang sama, maka reference akan menunjuk pada object
String di dalam pool tersebut. Bila ternyata java tidak menemukan di dalam String constant pool, maka java akan membuat object String di dalam String constant pool terlebih dahulu
Contoh
Object String adalah Immutable
Object String adalah immutable (tidak dapat diubah)
Sekali sebuah object String berisi suatu nilai, maka nilai tersebut tidak dapat diubah (tidak peduli apakah object String tersebut berada pada heap ataupun String constant pool).
Dalam praktek pemrograman, kita merasa bahwa object String dapat berubah, hal ini
karena yang berubah adalah nilai reference
Statement s1 = s1 + ”def”; seakan-akan menyatseakan-akan bahwa object String dapat diubah, akan tetapi sebenarnya statement tersebut hanya membuat object String baru “abcdef” dan
kemudian mengubah nilai reference s1 untuk menunjuk object String baru
tersebut.
Sebenarnya, statement s1 = s1 +
”def”; di atas melibatkan 3 buah object String, yaitu : “abc” (object String awal yang ditunjuk oleh s1), “def” (object String baru), dan “abcdef” (object String baru).
Method-Method Penting Class String
public int length()
public boolean equals(String s)
public boolean equalsIgnoreCase(String s)
public char charAt(int index)
public String concat(String s)
public String replace(char oldChar, char newChar)
public String substring(int begin)
public String substring(int begin, int end)
public String toLowerCase()
public String toUpperCase()
public String trim()
public int length()
Method ini mengembalikan panjang dari suatu object String
int i = "abcde".length();
public boolean equals(String s)
Membandingkan suatu object String dengan object String s.
Mengembalikan nilai true bila object String s
adalah bukan null dan s memiliki urutan karakter yang sama dengan object String tempat method equals dipanggil.
boolean b = "abcd".equals("abcd");
public boolean equalsIgnoreCase(String s)
Sama seperti method public boolean
equals(String s), hanya saja pada method ini tidak memperhatikan huruf besar atau kecil
boolean b = "abcd". equalsIgnoreCase(" AbcD ");
public char charAt(int index)
Method ini mengembalikan karakter yang terletak pada index ke n dari object String.
Index pada String dimulai dari 0
char c = "0123456".charAt(4);
System.out.println("c = " + c); // Mencetak c = 4
Bila nilai argumen index lebih besar sama dengan jumlah karakter dari object String tersebut, maka akan
dilemparkan Exception yang berupa
public String concat(String s)
Method ini mengembalikan suatu object String baru yang isinya merupakan gabungan dari
object String s dan object String method concat dipanggil.
Nilai dari object String baru adalah nilai object String s diletakkan dibelakang nilai object String method concat dipanggil
String s = "halo ".concat("apa ").concat("kabar ?"); System.out.println("s = " + s);
public String concat(String s)
Operator + dan += bila dioperasikan pada String akan melakukan hal yang sama dengan method concat ini
String s = "halo " + "apa " + "kabar ";
System.out.println("s = " + s); //mencetak s = halo apa kabar ?
public String replace(char oldChar, char newChar) Mengembalikan sebuah object String baru
dimana semua huruf yang sesuai dengan argumen oldChar pada object String tempat method replace dipanggil diganti dengan huruf pada argumen newChar
String s = "ABABABABA".replace("B", "D"); System.out.println("s = " + s);
public String substring(int begin)
Method ini mengembalikan sebuah object String baru dimana nilainya adalah huruf ke n sampai dengan huruf terakhir dari object String tempat method substring dipanggil. Nilai n ditentukan oleh argumen begin, nilai n adalah zero-based (huruf pertama String adalah berindex 0)
String s = "0123456789".substring(3); System.out.println("s = " + s);
public String substring(int begin, int end)
Method ini sama seperti method public String substring(int begin), hanya saja akhir substring adalah karakter ke end-1 (parameter end adalah zero-based)
String s = "0123456789".substring(3, 8);
public String toLowerCase()
Method ini mengembalikan sebuah object String baru, dimana nilainya adalah semua huruf dari object String tempat method toLowerCase
dipanggil dirubah menjadi huruf kecil semua
String s = "AnToN".toLowerCase();
public String toUpperCase()
Method ini mengembalikan sebuah object String baru, dimana nilainya adalah semua huruf dari object String tempat method toUpperCase
dipanggil dirubah menjadi huruf besar semua
String s = "AnToN". toUpperCase();
public String trim()
Mengembalikan object String baru dimana
nilainya adalah object String tempat method trim dipanggil, tapi dengan semua blank-spaces
diawal dan diakhir String dihapus
String s = " \n\tABC \t\t\n".trim();
public String toString()
Mengembalikan object yang sama dengan object String tempat method toString dipanggil
Catatan
Kelas String memiliki method length(), sedangkan array memiliki variable length
Method concat() , replace() , toLowerCase() , toUpperCase() , substring() , trim() dari kelas String selalu mengembalikan object String hasil manipulasi dan tidak mengubah object String tempat method diubah
Class StringBuffer dan StringBuilder
Kelas java.lang.String sangat tidak efektif bila kita ingin melakukan banyak modifikasi terhadap suatu string karena sifat dari kelas
java.lang.String yang immutable
Hal ini menyebabkan banyak modfikasi pada suatu kelas String akan dapat menyebabkan banyaknya object String yang terlibat
Kelas java.lang.StringBuffer dan
java.lang.StringBuilder mengatasi permasalahan ini (mutable)
Class StringBuffer dan StringBuilder
Perbedaan utama antara class StringBuffer dan
class StringBuilder adalah pada kecepatan, bahwa class StringBuilder lebih cepat dari class
StringBuffer
Perbedaan lain antara StringBuffer / StringBuilder dengan String adalah object yang berubah saat suatu method dipanggil
Method-Method penting class StringBuilder
public StringBuilder append(String s)
public StringBuilder delete(int start, int end)
public StringBuilder insert(int offset, String s)
public StringBuilder reverse()
public StringBuilder append(String s)
Memiliki padanan public synchronized StringBuffer append(String s)
Method ini akan menambah object String s pada akhir nilai object StringBuilder
Method ini dioverload sehingga dapat menerima argumen boolean, char, float, double, int, long, dan lain-lain
public StringBuilder delete(int start, int end)
Memiliki padanan public synchronized StringBuffer delete(int start, int end)
Method ini akan menghapus karakter ke start (zero based) sampai dengan ke end-1 (zero based)
public StringBuilder insert(int offset, String s) Memiliki padanan public synchronized
StringBuffer insert(int offset, String s)
Method ini akan menambah object String s pada karakter ke offset (zero base) dari nilai object
public StringBuilder reverse()
Memiliki padanan public synchronized StringBuffer reverse()
Method ini akan membalik urutan karakter nilai object StringBuilder, karakter terakhir menjadi karakter pertama (dan sebaliknya)
public String toString()
Mengembalikan nilai string object StringBuilder atau StringBuffer sebagai object String