Mengolah teks jarang berhenti pada menggabung dan membandingkan — kita perlu memotong, mencari, mengganti, memecah, lalu merakit kembali. Class String menyediakan puluhan method untuk semua tugas tersebut, dan sebagian kecil di antaranya menutup 90% kebutuhan sehari-hari. Chapter ini mempraktikkan method inti satu per satu: substring, indexOf, contains, toUpperCase, replace, strip, repeat, dan join, ditambah dua peralatan modern — pemecahan split dengan parameter limit dan stream chars(). Semua contoh dijalankan pada satu teks panjang agar hasil tiap method mudah dibandingkan.

Memotong, Mencari, dan Mengganti #

Indeks karakter berperan penting di sini, dengan konvensi sama seperti array: karakter pertama berindeks 0. Method substring(a) mengambil potongan dari indeks a hingga akhir; substring(a, b) mengambil mulai indeks a hingga sebelum indeks b. Method indexOf mencari posisi pertama kemunculan teks lain dan mengembalikan -1 bila tidak ditemukan — nilai sentinel yang wajib diperiksa sebelum dipakai sebagai indeks.

public class MethodString {
    public static void main(String[] args) {
        String teks = "Belajar Java itu menyenangkan";

        System.out.println("length()          : " + teks.length());
        System.out.println("substring(8)      : " + teks.substring(8));
        System.out.println("substring(0, 7)   : " + teks.substring(0, 7));
        System.out.println("indexOf(\"Java\")   : " + teks.indexOf("Java"));
        System.out.println("indexOf(\"Kotlin\") : " + teks.indexOf("Kotlin"));
        System.out.println("contains(\"itu\")   : " + teks.contains("itu"));
        System.out.println("toUpperCase()     : " + teks.toUpperCase());
        System.out.println("replace('a', 'o') : " + teks.replace('a', 'o'));

        String jarang = "   Java   ";
        System.out.println("strip()           : [" + jarang.strip() + "]");
        System.out.println("isBlank()         : " + "   ".isBlank());
        System.out.println("trim vs strip     : [" + "\u2000teks\u2000".trim() + "] [" + "\u2000teks\u2000".strip() + "]");
        System.out.println("repeat(3)         : " + "ab".repeat(3));
        System.out.println("join              : " + String.join(", ", "Budi", "Siti", "Dewi"));
    }
}

Output yang Dihasilkan:

text
length()          : 29
substring(8)      : Java itu menyenangkan
substring(0, 7)   : Belajar
indexOf("Java")   : 8
indexOf("Kotlin") : -1
contains("itu")   : true
toUpperCase()     : BELAJAR JAVA ITU MENYENANGKAN
replace('a', 'o') : Belojor Jovo itu menyenongkon
strip()           : [Java]
isBlank()         : true
trim vs strip     : [ teks ] [teks]
repeat(3)         : ababab
join              : Budi, Siti, Dewi

Mari kita telaah baris-baris kode di atas:

  1. Baris 5 (teks.length()): menghitung karakter termasuk spasi — hasil 29 untuk teks contoh.
  2. Baris 6-7 (substring): substring(8) memotong mulai indeks 8 (huruf J) hingga akhir, menghasilkan "Java itu menyenangkan"; substring(0, 7) berhenti sebelum indeks 7, menghasilkan tepat "Belajar". Batas atas tidak ikut diambil — konvensi yang sama dengan copyOfRange pada array.
  3. Baris 8-10 (indexOf, contains): kata "Java" ditemukan mulai indeks 8; kata "Kotlin" tidak ada sehingga kembalian -1. Method contains hanya menjawab ada atau tidak (boolean), berguna saat posisinya tidak diperlukan.
  4. Baris 11-12 (toUpperCase, replace): keduanya mengembalikan String baru — objek asal tidak berubah, sesuai sifat immutable. replace('a', 'o') mengganti semua kemunculan, terbukti dari "Belojor Jovo" pada output.
  5. Baris 14-16 (strip, isBlank): strip membuang spasi di kedua ujung. Baris trim vs strip memakai karakter spasi Unicode \u2000: trim hanya mengenali spasi berkode ASCII hingga \u0020 sehingga karakter tersebut bertahan, sedangkan strip mengenali seluruh spasi Unicode dan membuangnya — terlihat dari output [ teks ] versus [teks]. Method isBlank mengembalikan true untuk teks kosong atau berisi spasi saja.
  6. Baris 17-18 (repeat, join): "ab".repeat(3) menduplikasi teks tiga kali menjadi ababab; String.join merakit beberapa bagian dengan pemisah tertentu — keduanya hadir sejak Java 11.

Memecah dengan split dan Menelusuri dengan chars #

Method split memecah String menjadi array berdasarkan pemisah (regular expression sederhana seperti koma). Versi dua argumennya menerima parameter limit yang membatasi jumlah bagian — bagian terakhir menampung sisa teks apa adanya. Untuk penelusuran per karakter, method chars() menghasilkan stream int berkode Unicode yang bisa difilter dan dihitung tanpa perulangan eksplisit.

java PecahTeks.java
public class PecahTeks {
    public static void main(String[] args) {
        String csv = "Budi,85,Siti,92";
        String[] kolom = csv.split(",");
        for (String k : kolom) {
            System.out.println("kolom: " + k);
        }

        String[] duaBagian = "a,b,c,d".split(",", 2);
        System.out.println("split limit 2: " + String.join(" | ", duaBagian));

        String nama = "Budi Santoso";
        long vokal = nama.chars()
                .filter(c -> "aeiouAEIOU".indexOf(c) >= 0)
                .count();
        System.out.println("Jumlah huruf vokal: " + vokal);
    }
}

Output yang Dihasilkan:

text
kolom: Budi
kolom: 85
kolom: Siti
kolom: 92
split limit 2: a | b,c,d
Jumlah huruf vokal: 5

Bedah untuk contoh kedua:

  1. Baris 4-8 (split(",")): teks CSV dipecah pada tiap koma, menghasilkan empat elemen — Budi, 85, Siti, 92. Pemisah koma tidak ikut masuk hasil.
  2. Baris 10-11 (split(",", 2)): dengan limit 2, pemecahan berhenti setelah dua bagian; bagian kedua menampung sisa mentah b,c,d — terlihat pada output a | b,c,d. Pola ini berguna memisahkan “bagian penting pertama” dari “sisa teks”, misalnya memisahkan key dan value.
  3. Baris 13-16 (chars()): stream karakter difilter dengan lambda c -> "aeiouAEIOU".indexOf(c) >= 0 yang menyaring huruf vokal, lalu count() menghitungnya: Budi Santoso memuat 5 vokal. Tanpa chars(), kita akan menulis perulangan charAt(i) manual.

Satu catatan penutup: karena String immutable, semua method di atas yang “mengubah” teks mengembalikan objek baru. Merangkai banyak operasi pada teks besar dalam perulangan tetap mahal — dan itulah pekerjaan yang diselesaikan StringBuilder pada chapter berikutnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

MethodString.java

Unduh berkas
java
public class MethodString {
    public static void main(String[] args) {
        String teks = "Belajar Java itu menyenangkan";

        System.out.println("length()          : " + teks.length());
        System.out.println("substring(8)      : " + teks.substring(8));
        System.out.println("substring(0, 7)   : " + teks.substring(0, 7));
        System.out.println("indexOf(\"Java\")   : " + teks.indexOf("Java"));
        System.out.println("indexOf(\"Kotlin\") : " + teks.indexOf("Kotlin"));
        System.out.println("contains(\"itu\")   : " + teks.contains("itu"));
        System.out.println("toUpperCase()     : " + teks.toUpperCase());
        System.out.println("replace('a', 'o') : " + teks.replace('a', 'o'));

        String jarang = "   Java   ";
        System.out.println("strip()           : [" + jarang.strip() + "]");
        System.out.println("isBlank()         : " + "   ".isBlank());
        System.out.println("trim vs strip     : [" + "\u2000teks\u2000".trim() + "] [" + "\u2000teks\u2000".strip() + "]");
        System.out.println("repeat(3)         : " + "ab".repeat(3));
        System.out.println("join              : " + String.join(", ", "Budi", "Siti", "Dewi"));
    }
}

PecahTeks.java

Unduh berkas
java
public class PecahTeks {
    public static void main(String[] args) {
        String csv = "Budi,85,Siti,92";
        String[] kolom = csv.split(",");
        for (String k : kolom) {
            System.out.println("kolom: " + k);
        }

        String[] duaBagian = "a,b,c,d".split(",", 2);
        System.out.println("split limit 2: " + String.join(" | ", duaBagian));

        String nama = "Budi Santoso";
        long vokal = nama.chars()
                .filter(c -> "aeiouAEIOU".indexOf(c) >= 0)
                .count();
        System.out.println("Jumlah huruf vokal: " + vokal);
    }
}