JavaRush /Java Blog /Random-ID /Metode split di Java: membagi string menjadi beberapa bag...

Metode split di Java: membagi string menjadi beberapa bagian

Dipublikasikan di grup Random-ID
Mari kita bicara tentang metode pemisahan String : apa fungsinya dan mengapa diperlukan. Sangat mudah untuk menebak bahwa ini membagi string, tetapi bagaimana cara kerjanya dalam praktik? Mari kita lihat lebih dekat cara kerja metode ini dan diskusikan beberapa detail yang tidak jelas, dan pada saat yang sama cari tahu berapa banyak metode terpisah yang sebenarnya ada di kelas String . Ayo pergi!

Definisi dan tanda tangan untuk Java String.split

Metode split di Java membagi string menjadi substring menggunakan pembatas yang ditentukan menggunakan ekspresi reguler. Mari beri tanda tangan pada metodenya dan mulai menyelaminya:
String[] split(String regex)
Ada dua hal yang jelas dari tanda tangannya:
  1. Metode ini mengembalikan array string.
  2. Metode ini mengambil string regex sebagai parameter.
Mari kita lihat masing-masing hal secara terpisah berdasarkan definisi yang diberikan di atas.
  1. Metode ini mengembalikan array string.

    Definisi tersebut berisi kata-kata berikut: “ Metode split di Java membagi string menjadi substring.” Substring ini dikumpulkan oleh metode ke dalam array dan mewakili nilai kembaliannya.

  2. Metode ini mengambil string regex sebagai parameter.

    Sekali lagi, ingat definisinya: “membagi string menjadi substring menggunakan pembatas yang ditentukan menggunakan ekspresi reguler.” Parameter regex yang diterima adalah pola ekspresi reguler yang diterapkan pada string sumber dan cocok dengan karakter pembatas (atau kombinasi karakter) dalam string sumber.

Metode split di Java: membagi string menjadi beberapa bagian - 1

Berpisah dalam praktik

Sekarang mari kita mulai berbisnis. Bayangkan kita mempunyai rangkaian kata-kata. Misalnya seperti ini:
Saya suka Jawa
Kita perlu memecah string menjadi kata-kata. Kita melihat bahwa pada baris ini kata-kata dipisahkan satu sama lain dengan spasi. Ruang adalah kandidat ideal untuk peran pemisah dalam kasus ini. Seperti inilah kode untuk menyelesaikan masalah 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 adalah baris berikut:
Saya suka Jawa
Mari kita lihat beberapa contoh lagi bagaimana metode split bekerja :
Garis Pembatas Hasil dari metode ini
"Aku suka 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. Pada baris kedua dari belakang, pembatasnya adalah koma, sehingga baris tersebut dipisahkan sedemikian rupa sehingga beberapa kata memiliki spasi di depannya. Pada baris terakhir, kami menggunakan koma dan karakter spasi sebagai pembatas. Oleh karena itu, larik yang dihasilkan tidak berisi baris apa pun dengan spasi di depannya. Ini hanyalah detail kecil yang menunjukkan betapa pentingnya memilih pemisah yang tepat dengan cermat.

Pembatas terkemuka

Ada satu lagi nuansa penting. Jika string sumber dimulai dengan pembatas, elemen pertama dari array yang dihasilkan akan menjadi string kosong. Sebagai contoh, akan terlihat seperti ini: String sumber: "Saya suka Java" Pembatas: " " Array yang dihasilkan: { "" , "I" , "love" , "Java" } Tetapi jika string sumber diakhiri dengan pembatas dan tidak dimulai, hasilnya akan berbeda: Sumber string: "Saya suka Java" Pemisah: " " Array yang dihasilkan: { "I" , "love" , "Java" } Mari kita lihat kode variasi metode pemisahan dengan karakter pemisah di akhir dan/atau awal string sumber :
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));
    }
}
Output dari metode utama akan seperti ini:
[Aku, cinta, Jawa] [, aku, cinta, Jawa] [Aku, cinta, Jawa] [, aku, cinta, Jawa]
Perhatikan lagi bahwa jika karakter pertama dalam string sumber adalah karakter pembatas, array yang dihasilkan akan memiliki string kosong sebagai elemen pertamanya.

Teman yang kelebihan beban

Kelas String memiliki metode pemisahan lain dengan tanda tangan ini:
String[] split(String regex, int limit)
Metode ini memiliki parameter batas tambahan : metode ini menentukan berapa kali pola regex akan diterapkan ke string sumber. Di bawah ini penjelasannya:

batas> 0

batas -1 kali diterapkan . Dalam hal ini, panjang array tidak akan melebihi nilai batas . Elemen terakhir dari array akan menjadi bagian dari string setelah pembatas terakhir 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

Pola pencarian pembatas diterapkan pada string sebanyak mungkin. Panjang array yang dihasilkan bisa berapa saja. Contoh:
public class Main {
    public static void main(String[] args) {
        // Notice the space at the end of the line
        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, ]

        Note that the last element of the array is
        an empty string, resulting from the space
        at the end of the original string.
        */
    }

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

batas 0

Seperti halnya limit <0, pola pembatas diterapkan pada string sebanyak mungkin. Array yang dihasilkan dapat memiliki panjang berapa pun. Jika elemen terakhir sama dengan string kosong, elemen tersebut akan dibuang di array terakhir. Contoh:
public class Main {
    public static void main(String[] args) {
        // Notice the space at the end of the line
        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 melihat implementasi metode split dengan satu argumen, kita melihat bahwa metode ini memanggil saudaranya yang kelebihan beban dengan argumen kedua nol:
public String[] split(String regex) {
    return split(regex, 0);
}

Berbagai contoh

Dalam praktek kerja, terkadang kita mempunyai suatu garis yang disusun menurut aturan-aturan tertentu. Baris ini dapat “masuk” ke dalam program kita dari mana saja:
  • dari layanan pihak ketiga;
  • dari permintaan ke server kami;
  • dari file konfigurasi;
  • dll.
Biasanya dalam situasi seperti ini programmer mengetahui “aturan mainnya”. Katakanlah pemrogram mengetahui bahwa dia memiliki informasi tentang pengguna, yang disimpan menurut pola ini:
user_id|user_login|user_email
Misalnya, mari kita ambil nilai spesifik:
135|penyok|bender@gmail.com
Dan sekarang programmer dihadapkan pada tugas: menulis metode yang mengirimkan email ke pengguna. Yang dimilikinya adalah informasi tentang pengguna, dicatat dalam format di atas. Nah, subtugas yang akan terus kami analisis adalah mengisolasi alamat email dari informasi umum tentang pengguna. Ini adalah salah satu contoh dimana metode split dapat berguna. Lagi pula, jika kita melihat templatnya, kita memahami bahwa untuk mengekstrak alamat email pengguna dari semua informasi, kita hanya perlu membagi baris menggunakan metode split . Kemudian alamat email akan berada di elemen terakhir dari array yang dihasilkan. Mari kita beri contoh metode seperti itu, yang mengambil string yang berisi informasi tentang pengguna dan mengembalikan email pengguna. Untuk mempermudah, asumsikan string ini selalu cocok dengan format yang kita perlukan:
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 pemisahnya: "\\|" . Karena dalam ekspresi reguler “|” - ini adalah karakter khusus yang mengikat logika tertentu; untuk menggunakannya sebagai karakter biasa (yang ingin kita temukan di string sumber), kita perlu keluar dari karakter ini menggunakan dua garis miring terbalik. Mari kita lihat contoh lainnya. Katakanlah kita memiliki informasi tentang suatu pesanan, yang ditulis kira-kira dalam format berikut:
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
Baiklah, atau mari kita ambil nilai spesifiknya:
1, mentimun, 20,05; 2, tomat, 123,45; 3, kelinci, 0,50
Kita dihadapkan pada tugas menghitung total biaya pesanan. Di sini kita harus menggunakan metode split beberapa kali. Langkah pertama adalah membagi string melalui simbol ";" menjadi bagian-bagian komponennya. Kemudian di setiap bagian tersebut kita akan memiliki informasi tentang masing-masing produk, yang dapat kita proses di masa depan. Dan kemudian, dalam setiap produk, kami akan memisahkan informasi menggunakan simbol "," dan mengambil elemen dengan indeks tertentu (di mana harga disimpan) dari array yang dihasilkan, mengubahnya menjadi bentuk numerik dan mengkompilasi biaya akhir pesanan. Mari tulis metode yang akan menghitung semua ini:
public class Main {
    public static void main(String[] args) {
        String orderInfo = "1, cucumbers, 20.05; 2, tomatoes, 123.45; 3, hares, 0.50";
        System.out.println(getTotalOrderAmount(orderInfo));
        // Output: 144.0
    }

    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;
    }
}
Cobalah mencari tahu sendiri bagaimana metode ini bekerja. Berdasarkan contoh-contoh ini, kita dapat mengatakan bahwa metode split digunakan ketika kita memiliki beberapa informasi dalam bentuk string, yang darinya kita perlu mengekstrak beberapa informasi yang lebih spesifik.

Hasil

Kami melihat metode pemisahan kelas String . Diperlukan untuk membagi string menjadi bagian-bagian komponennya menggunakan pembatas khusus. Metode ini mengembalikan array string (komponen string). Menerima ekspresi reguler yang menemukan karakter pembatas. Kami melihat berbagai seluk-beluk metode ini:
  • karakter pembatas utama;
  • membebani saudara dengan dua argumen.
Kami juga mencoba mensimulasikan beberapa situasi “kehidupan nyata” di mana kami menggunakan metode split untuk memecahkan masalah fiktif namun cukup realistis.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION