CodeGym /Java Blog /Acak /Metode Java String.split()
John Squirrels
Level 41
San Francisco

Metode Java String.split()

Dipublikasikan di grup Acak
Mari kita bicara tentang metode String.split Java : apa fungsinya dan mengapa diperlukan. Tidak sulit untuk menebak bahwa ini membagi string Java, tetapi bagaimana cara kerjanya? Mari selami lebih dalam operasi metode ini dan diskusikan beberapa detail yang tidak jelas. Pada saat yang sama, kita akan mempelajari berapa banyak metode pemisahan yang dimiliki String . Ayo pergi!

Deskripsi dan tanda tangan untuk String.split Java

Di Java, metode split membagi string menjadi substring menggunakan pembatas yang ditentukan menggunakan ekspresi reguler. Mari tunjukkan tanda tangan metode dan mulai penyelaman kita:

String[] split(String regex)
Ada dua hal yang jelas dari tanda tangannya:
  1. Metode mengembalikan array string.
  2. Metode ini memiliki parameter input string yang disebut regex .
Mari kita menganalisis masing-masing secara terpisah saat kita memecah deskripsi yang diberikan di atas.
  1. Metode mengembalikan array string.

    Deklarasi berisi kata-kata berikut: "Di Jawa, metode split membagi string menjadi substring." Metode mengumpulkan substring ini ke dalam array yang menjadi nilai kembalian.

  2. Metode ini memiliki parameter input string yang disebut regex .

    Sekali lagi, ingat deskripsi: "membagi string menjadi substring menggunakan pembatas yang ditentukan menggunakan ekspresi reguler." Parameter input regex adalah ekspresi reguler yang diterapkan ke string asli. Ketika karakter atau kombinasi karakter cocok, mereka diperlakukan sebagai pembatas.

Metode String.split() di Java: membagi string menjadi beberapa bagian - 1

Perpecahan Java dalam praktiknya

Sekarang mari kita lebih dekat ke intinya. Bayangkan kita memiliki rangkaian kata. Misalnya, seperti ini:
Saya suka bahasa Jawa
Kita perlu membagi string menjadi kata-kata. Kita melihat bahwa kata-kata dalam string ini dipisahkan satu sama lain oleh spasi. Dalam hal ini, karakter spasi adalah kandidat sempurna untuk pembatas kita. Kode untuk menyelesaikan tugas kita akan terlihat seperti ini:

public class Main {
    public static void main(String[] args) {
        String str = "I love Java";
        String[] words = str.split(" ");
        for (String word : words) {
            System.out.println(word);
        }
    }
}
Output dari metode utama akan menjadi baris berikut:
Saya suka bahasa Jawa
Mari kita lihat beberapa contoh lagi tentang cara kerja metode split :
Rangkaian Pembatas Hasil dari metode
"Saya cinta Jawa" " " (karakter spasi) { "Aku" , "cinta" , "Jawa" }
"192.168.0.1:8080" ":" { "192.168.0.1" , "8080" }
"Merah, Oranye, Kuning" "," { "Merah" , "oranye" , "kuning" }
"Merah, Oranye, Kuning" ", " { "Merah" , "oranye" , "kuning" }
Perhatikan perbedaan antara dua baris terakhir pada tabel di atas. Di baris kedua hingga terakhir, koma digunakan sebagai pembatas. Akibatnya, saat string dipisah, beberapa kata memiliki spasi di depan. Di baris terakhir, kami menggunakan koma dan spasi sebagai pembatas kami. Itu sebabnya tidak ada substring dengan spasi terdepan di larik yang dihasilkan. Ini hanyalah detail halus yang menunjukkan betapa pentingnya memilih pembatas yang tepat dengan hati-hati.

Pembatas terkemuka

Ini adalah nuansa penting lainnya. Jika string asli dimulai dengan pembatas, maka elemen pertama dari array yang dihasilkan akan berupa string kosong. Misalnya, akan terlihat seperti ini: String asli: " Saya suka Java" Pembatas: " " Array yang dihasilkan: { "", "I", "love", "Java" } Tetapi jika string asli diakhiri dengan pembatas, lebih baik dari awal dengan satu, maka hasilnya akan berbeda: Original string: "I love Java" Delimiter: " " Resultan array: { "I", "love", "Java"

public class Main {
    public static void main(String[] args) {
        print("I love Java".split(" "));
        print(" I love Java".split(" "));
        print("I love Java ".split(" "));
        print(" I love Java ".split(" "));
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}
Keluaran metode utama akan seperti ini:
[aku, cinta, jawa] [, aku, cinta, jawa] [aku, cinta, jawa] [, aku, cinta, jawa]
Sekali lagi alihkan perhatian Anda pada fakta bahwa ketika karakter pertama dalam string asli adalah karakter pembatas, hasilnya adalah elemen pertama dalam array akan menjadi string kosong.

Saudara yang kelebihan beban

Kelas String memiliki metode pemisahan lain dengan tanda tangan berikut:

String[] split(String regex, int limit)
Metode ini memiliki parameter batas tambahan : menentukan berapa kali pola regex akan diterapkan ke string asli. Lihat penjelasan di bawah ini:

batas > 0

Pola diterapkan batas -1 kali. Terlebih lagi, panjang dari array yang dikembalikan tidak akan melebihi nilai parameter limit . Elemen terakhir dari array akan menjadi bagian dari string yang mengikuti tempat terakhir di mana pembatas ditemukan. Contoh:

public class Main {
    public static void main(String[] args) {
        print("I love Java".split(" ", 1));
        print("I love Java".split(" ", 2));
        /*
         Output: 
         [I love Java]
         [I, love Java]
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

batas < 0

Ekspresi reguler pembatas diterapkan ke string sebanyak mungkin. Array yang dihasilkan dapat memiliki panjang berapa pun. Contoh:

public class Main {
    public static void main(String[] args) {
        // Note the space at the end of the string
        print("I love Java ".split(" ", -1));
        print("I love Java ".split(" ", -2));
        print("I love Java ".split(" ", -12));
        /*
         Output:
        [I, love, Java, ]
        [I, love, Java, ]
        [I, love, Java, ]
        
        Please note that the last element of the array is
        an empty string. This is caused by the whitespace
        at the end of the original string. 
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

batas = 0

Seperti kasus di mana batas < 0, pola pembatas diterapkan ke string sebanyak mungkin. Array terakhir dapat memiliki panjang berapa pun. Jika elemen terakhir adalah string kosong, mereka dibuang dari array terakhir. Contoh:

public class Main {
    public static void main(String[] args) {
        // Note the space at the end of the string
        print("I love Java ".split(" ", 0));
        print("I love Java ".split(" ", 0));
        print("I love Java ".split(" ", 0));
        /*
         Output:
        [I, love, Java]
        [I, love, Java]
        [I, love, Java]
        Note the absence of empty strings at the end of the arrays
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}
Jika kita mengintip implementasi versi satu parameter dari metode split , maka kita dapat melihat bahwa ini seperti saudara kandungnya yang kelebihan beban, tetapi dengan argumen kedua disetel ke nol:

    public String[] split(String regex) {
        return split(regex, 0);
    }

Berbagai contoh

Dalam praktik dunia nyata, terkadang kita memiliki string yang dihasilkan menurut aturan tertentu. String seperti itu mungkin masuk ke program kita dari mana saja:
  • dari layanan pihak ketiga;
  • dari permintaan yang dikirim ke server kami;
  • dari file konfigurasi;
  • dan seterusnya.
Dalam situasi ini, programmer biasanya mengetahui "aturan main". Katakanlah seorang programmer mengetahui bahwa dia berurusan dengan informasi pengguna yang disimpan menurut pola ini:
user_id|user_login|user_email
Mari kita ambil beberapa nilai spesifik sebagai contoh:
135|bender|bender@gmail.com
Misalkan tugas programmer adalah menulis metode yang mengirimkan email ke pengguna. Pemrogram memiliki akses ke data pengguna, yang direkam dalam format yang diberikan di atas. Subtugas yang sekarang akan terus kami analisis adalah cara mengisolasi alamat email dari data pengguna lainnya. Ini adalah salah satu contoh di mana metode split dapat berguna. Lagi pula, jika kita melihat template data pengguna, kita menyadari bahwa mengekstrak alamat email pengguna dari yang lain semudah memanggil metode split untuk memisahkan string. Kemudian alamat email akan berada di elemen terakhir dari array yang dihasilkan. Berikut adalah contoh metode yang mengambil string berisi data pengguna dan mengembalikan alamat email pengguna. Untuk mempermudah, misalkan string data selalu dalam format yang kita inginkan:

public class Main {
    public static void main(String[] args) {
        String userInfo = "135|bender|bender@gmail.com";
        System.out.println(getUserEmail(userInfo));
        // Output: bender@gmail.com
    }

    static String getUserEmail(String userInfo) {
        String[] data = userInfo.split("\\|");
        return data[2]; // or data[data.length - 1]
    }
}
Perhatikan pembatas: "\\|" . Dalam ekspresi reguler, "|" adalah karakter khusus dengan arti khusus, jadi jika kita ingin menggunakannya sebagai karakter biasa (yaitu apa yang ingin kita temukan di string asli), maka kita perlu meng-escape karakter tersebut dengan dua garis miring terbalik. Pertimbangkan contoh lain. Katakanlah kita memiliki informasi pesanan yang disusun seperti ini:
item_number_1,item_name_1,item_price_1;item_number_2,item_name_2,item_price_2;...;item_number_n,item_name_n,item_price_n
Atau kita bahkan dapat mengadopsi beberapa nilai tertentu:
1,mentimun,2,39;2,tomat,1,89;3,bacon,4,99
Tugas kita adalah menghitung total biaya pesanan. Di sini kita harus menerapkan metode split beberapa kali. Langkah pertama adalah memisahkan string menggunakan ";" sebagai pembatas untuk memecahnya menjadi bagian-bagian komponennya. Kemudian setiap substring yang dihasilkan akan menyimpan informasi tentang produk terpisah, yang dapat kami proses nanti. Kemudian, untuk setiap produk, kami akan memisahkan informasi yang sesuai menggunakan simbol ",". Kami akan mengambil elemen dengan indeks tertentu (yang menyimpan harga produk) dari array string yang dihasilkan, mengubahnya menjadi bentuk numerik, dan menghitung total biaya pesanan. Mari tulis sebuah metode yang akan melakukan semua perhitungan ini:

public class Main {
    public static void main(String[] args) {
        String orderInfo = "1,cucumbers,2.39;2,tomatoes,1.89;3,bacon,4.99";
        System.out.println(getTotalOrderAmount(orderInfo));
        // Output: 9.27
    }

    static double getTotalOrderAmount(String orderInfo) {
        double totalAmount = 0d;
        final String[] items = orderInfo.split(";");

        for (String item : items) {
            final String[] itemInfo = item.split(",");
            totalAmount += Double.parseDouble(itemInfo[2]);
        }

        return totalAmount;
    }
}
Lihat apakah Anda dapat mengetahui cara kerja metode ini sendiri. Berdasarkan contoh-contoh ini, kita dapat mengatakan bahwa metode pemisahan digunakan ketika kita memiliki beberapa data yang diformat sebagai string, dan kita perlu mengekstrak informasi tertentu yang lebih spesifik darinya.

Ringkasan

Kami memeriksa metode split dari kelas String . Itu yang Anda butuhkan ketika Anda harus membagi string menjadi bagian-bagian komponennya dengan bantuan pembatas khusus. Metode mengembalikan array string (substring yang terdiri dari string asli). Ia menerima ekspresi reguler yang kecocokannya mewakili karakter pembatas. Kami memeriksa berbagai seluk-beluk metode ini:
  • pembatas utama;
  • saudara kandungnya yang kelebihan beban dengan dua parameter.
Kami juga mencoba memodelkan beberapa situasi kehidupan nyata di mana kami menggunakan metode pemisahan untuk memecahkan masalah hipotetis, tetapi cukup realistis.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION