Modul 3 : String - IvanSholana/Pemrograman-Berbasis-Objek-Sistem-Informasi GitHub Wiki

Deskripsi String

String merupakan salah satu class di dalam java yang mana class tersebut menyimpan, mengolah, dan merepresentasikan jenis data berupa kumpulan dari character. String tidak termasuk ke dalam tipe data primitive seperti integer dan char meskipun ketiganya digunakan untuk menentukkan jenis data yang akan disimpan. Perbedaan paling sederhana dapat dilihat ketika menggunakanString. Perhatikan kode di bawah ini:

String NamaString = "abcdefgh"; // menggunakan String (Class)
char NamaChar = 'a'; // menggunakan char (Tipe Data)

Dapat dilihat pada kode program di atas penulisan String diawali dengan huruf kapital S sedangkan char tidak, hal tersebut juga berlaku terhadap Integer dan int, keduanya sama sama mempresentasikan data numerik tetapi Integer adalah class sedangkan int adalah tipe data. Dikarenakan String bukanlah tipe data, maka String NamaString pada kode di atas merupakan Objek atau entitas yang dibuat dari sebuah class dengan NamaString merupakan variabel yang merujuk pada objek String.

Perbedaan lainnya yang dimiliki String sebagai sebuah class adalah strint memiliki Atribute (bersifat private) dan Method. Adapun hal tersebut dapat dibuktikan dengan menambahkan tanda titik . pada objek atau class string.

image

Dapat dilihat pada gambar di atas ketika diketikkan tanda titik maka akan muncul banyak suggestion method yang mana merupakan fungsi dan prosedur yang dimiliki dan dapat digunakan oleh class String. Sebenarnya ketika kita melakukan deklarasi objek String saat itu juga kita memanggil method di dalam class String yaitu method constructor. Method ini bertujuan untuk membentuk struktur objek string dengan melakukan assigment nilai nilai terhadap atribute yang dimiliki oleh class string seperti value, ofset, count dan hash.

Begitupula ketika kita melakukan output terhadap nilai objek string, maka secara otomatis java akan memanggil method to.String milik class string.

String bersifat imutable atau tidak dapat dirubah nilainya ketika telah dideklarsikan tetapi jika kalian coba kode di bawah ini:

String str = "Hello, World!";
str = "Hello World 2";
str = "Hello World 3";
System.out.println(str);

Maka kode di atas tidaklah error dan nilai dari str berubah mengikuti assigment yang diberikan. Padahal pada penjelasan pertama dikatakan bahwa String bersifat imutable atau tidak dapat dirubah. Jawabannya adalah sesungguhnya perubahan nilai yang dilakukan bukanlah merubah nilai dari objek yang sebelumnya dideklarasikan tetapi Java membuat sebuah objek baru dengan nilai baru, belum percaya? mari kita buktikan dengan mencoba kode program di bawah ini.

String str1 = "Hello, World!";
String str2 = str1;

// membandingkan str1 dan str2
if (str1 == str2) {
    System.out.println("str1 dan str2 menunjuk ke objek yang sama");
} else {
    System.out.println("str1 dan str2 menunjuk ke objek yang berbeda");
}

str1 = "Hello World 2";

// membandingkan str1 dan str2 lagi setelah str1 berubah
if (str1 == str2) {
    System.out.println("str1 dan str2 menunjuk ke objek yang sama");
} else {
    System.out.println("str1 dan str2 menunjuk ke objek yang berbeda");
}

/*
Output:
str1 dan str2 menunjuk ke objek yang sama
str1 dan str2 menunjuk ke objek yang berbeda
*/

Mendeklarasikan String

Untuk mendeklarasikan string maka kita dapat melakukan dengan berbagai macam cara, hal tersebut dikarenakan class string memiliki 11 constructor sehingga juga terdapat 11 cara untuk mendeklarasikan String. Adapun yang membedakannya adalah parameter yang dikirimkan kepada constructor seperi di bawah ini:

  1. String(): constructor kosong yang membuat objek String kosong (tanpa karakter).
  2. String(byte[]): constructor yang membuat objek String dari array byte.
  3. String(byte[], Charset): constructor yang membuat objek String dari array byte dengan menggunakan set karakter tertentu.
  4. String(byte[], int, int): constructor yang membuat objek String dari array byte dengan batasan indeks tertentu.
  5. String(byte[], int, int, Charset): constructor yang membuat objek String dari array byte dengan batasan indeks tertentu dan menggunakan set karakter tertentu.
  6. String(char[]): constructor yang membuat objek String dari array karakter.
  7. String(char[], int, int): constructor yang membuat objek String dari array karakter dengan batasan indeks tertentu.
  8. String(int[], int, int): constructor yang membuat objek String dari array integer.
  9. String(String): constructor yang membuat objek String dari String yang sudah ada.
  10. String(StringBuffer): constructor yang membuat objek String dari objek StringBuffer.
  11. String(StringBuilder): constructor yang membuat objek String dari objek StringBuilder.
  12. String(char[], boolean): constructor yang membuat objek String dari array karakter dengan opsi "mutable" (bisa diubah).
  13. String(int[], int, int, int): constructor yang membuat objek String dari array integer dengan opsi "radix" (basis bilangan).

Tenang saja, kita tidak akan membahas seluruh constructor di atas karena saya juga malas hehe🤤🤞Mari kita coba bahas 2 saja pada kode program di bawah ini:

// Cara 1 
String str = "Hallo World";
// Cara 2
char chars[ ] = { 's', 'c', 'i', 'e', 'n', 'c', 'e' }; 
String str2 = new String(chars); 

Cara pertama akan memanggil constructor pada nomor 9 dan cara kedua akan memanggil constructor nomor 6 dan hasilnya akan sama aja yaitu sebuah objek string. Jika kalian perhatikan untuk mendeklarasikan string berupa kalimat secara langsung maka digunakan tanda kutip dua "" di antara kalimat yang dituliskan.

String Buffer

String buffer juga merupakan salah satu class yang dimiliki oleh java yang digunakan untuk mempresentasikan serta mengoperasikan data berbentuk kumpulan character. Perbedaan antara string buffer dengan string biasa ialah string buffer tidak bersifat imutable sehingga dapat dilakukan manipulasi terhadap nilainya. Dikarenakan hal tersebut jugalah ketika kita melihat method yang digunakan terdapat method seperti append() dan delete() yang dapat digunakan untuk melakukan manipulasi nilai pada String Buffer.

Kelas StringBuffer dinamakan demikian karena ia bertindak sebagai buffer (penyangga) untuk memanipulasi string. Buffer pada dasarnya adalah suatu area memori yang digunakan untuk menyimpan data sementara sebelum diproses lebih lanjut. Dalam kasus StringBuffer, buffer digunakan untuk menyimpan karakter-karakter string yang sedang diubah atau dimanipulasi sebelum hasil akhirnya disimpan ke dalam suatu variabel.

Terdapat perbedaan dalam mendeklarasikan string buffer dan string biasa. Hal tersebut dikarenakan jumlah constructor yang berbeda antara class string buffer dan string biasa, salah satu cara untuk mendeklarasikan string buffer yaitu:

StringBuffer str = new StringBuffer("Hallo World");
System.out.println(str);

Setelah dideklarasikan objek dari class string buffer maka kita dapat melakukan manipulasi nilai terhadap nilai string buffer tersebut dengan berbagai method yang tersedia seperti:

StringBuffer str = new StringBuffer("Hallo World");
System.out.println(str);

str.append("Apakabar?");

System.out.println(str);

str.delete(0,10);

System.out.println(str);

Output:

Hallo World
Hallo WorldApakabar?
dApakabar?

String Builder

String Builder adalah salah satu jenis class lain yang digunakan untuk melakukan pengolahan data string atau kumpulan char di dalam pemgrograman Java. Sama seperti string buffer, string builder juga bersifat mutable atau dapat diubah ubah nilainya tanpa membuat objek string baru. Lalu perbedannya apa dengan string buffer? Terdapat beberapa perbedaan antara string builder dengan string buffer yaitu string builder dalam lingkup Multithreading (melakukan beberapa tugas secara bersamaan, sehingga meningkatkan efisiensi dan kinerja program).

Untuk mendeklarasikan String Builder dapat dilakukan dengan cara yang sama dengan class lain yaitu sebagai berikut:

StringBuilder str = new StringBuilder("Hello World");

Sama dengan class sebelum sebelumnya, string builder juga memiliki beberapa constructor seperti:

  1. StringBuilder(): Konstruktor ini membuat instance StringBuilder dengan kapasitas awal 16 karakter dan tanpa nilai awal.
  2. StringBuilder(int capacity): Konstruktor ini membuat instance StringBuilder dengan kapasitas awal yang ditentukan oleh argumen capacity dan tanpa nilai awal.
  3. StringBuilder(String str): Konstruktor ini membuat instance StringBuilder dengan kapasitas awal yang cukup untuk menampung nilai awal yang diberikan oleh argumen str.

Karena bersifat mutable maka string builder memiliki method - method yang dapat digunakan untuk memanipulasi nilai dari string tersebut. Contoh:

  1. append(): Metode ini digunakan untuk menambahkan nilai (berupa tipe data apapun) ke akhir StringBuilder.
  2. insert(): Metode ini digunakan untuk menyisipkan nilai (berupa tipe data apapun) ke dalam StringBuilder pada posisi tertentu.
  3. delete(): Metode ini digunakan untuk menghapus karakter atau substring tertentu dari StringBuilder.
  4. deleteCharAt(): Metode ini digunakan untuk menghapus karakter pada indeks tertentu dari StringBuilder.
  5. replace(): Metode ini digunakan untuk mengganti karakter atau substring tertentu dengan nilai baru pada StringBuilder.
  6. substring(): Metode ini digunakan untuk mengambil substring dari StringBuilder pada indeks tertentu.
  7. reverse(): Metode ini digunakan untuk membalik urutan karakter dalam StringBuilder.

Percobaan:

StringBuilder str = new StringBuilder("Hello World");
str.append("You're My World");
str.insert("Hallo World".length(),", ");
str.replace(0,5,"Hello");
System.out.println(str.substring(6));
str = str.reverse();
str.deleteCharAt(0);
System.out.println(str);

Percobaan

Percobaan 1

Di dalam String kita dapat memasukkan sekuen dari karakter escape yang terdiri dari satu karakter back slash () diikuti oleh karakter escape tersebut. Karakter escape tersebut merupakan karakter khusus yang tidak dapat dituliskan secara langsung di dalam string, seperti tanda kutip ganda, tanda kutip satu, backslash, dan karakter baris baru. Contoh:

System.out.println("\"hari ini adalah hari jum'at\"");
System.out.print("Baris 1\nBaris 2\nBaris 3\n");
System.out.println("Nama Saya \t: Tomo\nNIM \t\t: 120221232\n");
System.out.println("C:\\Windows\\System32\\");

Percobaan 2

Membandingkan String di java tidak bisa menggunakan operator equals (==) tetapi kita harus menggunakan method dari String yaitu equals dan equalsIgnoreCase. Sesuai dengan nama methodnya, equals digunakan untuk membandingkan objek String secara case-sensitive (huruf kecil dan besar dibedakan) dan sebaliknya equalsIgnoreCase digunakan untuk membandingkan String secara case-insensitive (huruf besar dan kecil tidak dibedakan). Contoh:

String str1 = "ITTS";
String str2 = "itts";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2);

Percobaan 3

Untuk menggabungkan string kita bisa menggunakan beberapa cara yaitu dengan menggunakan method concat maupun dengan operator + (plus) dan += (plus sama dengan). Cobalah kode dibawah ini. Apakah outputnya?

String str1 = "Monas";
System.out.println(str1);
String str2 = "monas";
System.out.println(str2);
String str3 = str1 + str2;
System.out.println(str3);
String str4 = str1.concat(str2);
System.out.println(str4);
str1 += str2;
System.out.println(str1);

Percobaan 4

Pada saat kita menggunakan concatenation (penggabungan) antara objek string dengan suatu nilai atau variable yang bertipe primitive (int, char, float, dsbnya) maka secara otomatis data primitif tersebut akan dikonversi menjadi string. Cobalah kode dibawah ini. Apakah outputnya?

int nilai = 100;
nilai = nilai * 2;
System.out.println("Angka " + 1 + " adalah angka pertama bilangan bulat positif");
System.out.println("100 x 2 = " + nilai);

Percobaan 5

Untuk mengganti nilai text dari String cukup menggunakan method replace dari String. Cobalah kode dibawah ini. Apakah outputnya?

String nama = "Dora";
nama = nama.replace("Dor", "Ti");
System.out.println(nama);

Latihan

Latihan 1

Apakah output program dibawah ini?

String s=new String("Bicycle");
int iBegin=1;
char iEnd=3;
System.out.println(s.substring(iBegin,iEnd));

Latihan 2

Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan!

public class Conv {
    public static void main(String[] args) {
        Conv c = new Conv();
        String s = new String("ello");
        c.amethod(s);
    }
    public void amethod(String s){
        String c = "H";
        c += s;
        System.out.println(c);
    }
}

Latihan 3

Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan!

public class EqTest3{
    public static void main(String argv[]){
        EqTest e = new EqTest();
    }
    EqTest(){
        String s1 = "Java";
        String s2 = "Java";
        String s3 = "java";
        if(s1 == s2)) {
            System.out.println("Equal");
        }else{
            System.out.println("Not equal");
        }
        if(s1 == s3)) {
            System.out.println("Equal");
        }else{
            System.out.println("Not equal");
        }
    }
}

Latihan 4

Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan!

public class EqTest4{
    public static void main(String argv[]){
        EqTest e = new EqTest();
    }
    EqTest(){
        String s1 = new String("Java");
        String s2 = new String("Java");
        String s3 = new String("java");
        if(s1 == s2)) {
            System.out.println("Equal");
        }else{
            System.out.println("Not equal");
        }
        if(s1 == s3)) {
            System.out.println("Equal");
        }else{
            System.out.println("Not equal");
        }
    }
}

Latihan 5

Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan!

public class EqTest5{
    public static void main(String argv[]){
        EqTest e = new EqTest();
    }
    EqTest(){
        String s = "Java";
        String s2 = "java";
        if(s.equalsIgnoreCase(s2)) {
            System.out.println("Equal");
        }else{
            System.out.println("Not equal");
        }
    }
}

Latihan 6

Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan!

public class EqTest6{
    public static void main(String argv[]){
        String str = "Java";
        StringBuffer buffer = new StringBuffer(str);
        if(str.equals(buffer)){
            System.out.println("Both are equal");
        }
        else{
            System.out.println("Both are not equal");
        }
    }
}

Latihan 7

Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan!

public class Test {
    public static void main(String args[]) {
        String str1="abc";
        String str2="def";
        String str3=str1.concat(str2);
        str1.concat(str2);
        System.out.println(str1);
    }
}

Soal Latihan Praktikum

Pak Mistari sedang membaca berita di koran karena gatau kenapa istri Pak Mistari yang sedang hamil ngidam ingin tau berapa jumlah kata di dalam koran tersebut. Mendengar hal tersebut pak mistari mencoba mengitung secara manual tapi selalu lupa, menggunakan method charAt(index) bantu pak Mistari menghitung jumlah kata dalam kalimat dengan membuat sebuah program di dalam Java.

Sample Input 1

"Jangan pilih Puan Pilpres 2024"

Sample Output 1

5

Sample Input 2

"Jokowi Presiden Tiga Periode"

Sample Ouput 2

4

TUGAS

Buatlah program yang meminta pengguna untuk menginputkan kata sandi yang berisi setidaknya dua huruf besar, setidaknya tiga huruf kecil, dan setidaknya satu digit. Tampilkan pesan yang menunjukkan apakah kata sandi itu valid; jika tidak, tampilkan alasan kata sandi tidak valid.

Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi