Cara Menggunakan Metode "Split" di Ruby

Seperti yang mungkin sudah Anda ketahui, masuk Rubi adalah apa yang dikenal sebagai benda kelas satu yang menggunakan sejumlah metode untuk kueri dan manipulasi.

Salah satu yang paling mendasar manipulasi string tindakan adalah untuk membagi string menjadi beberapa sub-string. Ini akan dilakukan, misalnya, jika Anda memiliki string seperti"foo, bar, baz" dan Anda ingin tiga senar "foo", "bar", dan "baz". Itu membagi metode kelas String dapat mencapai ini untuk Anda.

Penggunaan Dasar "Split"

Penggunaan paling dasar dari membagi Metode adalah untuk membagi string berdasarkan karakter tunggal atau urutan karakter statis. Jika argumen pertama split adalah string, karakter dalam string tersebut digunakan sebagai pemisah pemisah string, sedangkan dalam data yang dibatasi koma, koma digunakan untuk memisahkan data.

#! / usr / bin / env ruby
str = "foo, bar, baz"
menempatkan str.split (",")
$ ./1.rb
foo
batang
baz

Tambahkan Fleksibilitas Dengan Ekspresi Reguler

Ada cara yang lebih mudah untuk membatasi tali. Menggunakan ekspresi reguler sebagai pembatas membuat metode split jauh lebih fleksibel.

instagram viewer

Sekali lagi, ambil contoh string "foo, bar, baz". Ada spasi setelah koma pertama, tetapi tidak setelah koma kedua. Jika string "," digunakan sebagai pembatas, spasi akan tetap ada di awal string "bar". Jika string "," digunakan (dengan spasi setelah koma), string hanya akan cocok dengan koma pertama karena koma kedua tidak memiliki spasi setelahnya. Ini sangat membatasi.

Solusi untuk masalah ini adalah dengan menggunakan ekspresi reguler sebagai argumen pembatas Anda alih-alih string. Ekspresi reguler memungkinkan Anda untuk mencocokkan tidak hanya urutan karakter statis tetapi juga jumlah karakter dan karakter opsional yang tidak ditentukan.

Menulis Ekspresi Reguler

Saat menulis ekspresi reguler untuk pembatas Anda, langkah pertama adalah menjelaskan dalam kata-kata apa pembatas itu. Dalam hal ini, frasa "koma yang mungkin diikuti oleh satu atau lebih spasi" adalah masuk akal.

Ada dua elemen pada regex ini: koma dan spasi opsional. Spasi akan menggunakan kuantifier * (bintang, atau tanda bintang), yang berarti "nol atau lebih." Setiap elemen yang mendahului ini akan cocok dengan nol atau lebih banyak kali. Misalnya, regex /a*/ akan cocok dengan urutan nol atau lebih karakter 'a'.

#! / usr / bin / env ruby
str = "foo, bar, baz"
menempatkan str.split (/, * /)
$ ./2.rb
foo
batang
baz

Membatasi Jumlah Perpecahan

Bayangkan string nilai yang dipisahkan koma seperti "10,20,30, Ini adalah string arbitrer". Format ini tiga angka diikuti oleh kolom komentar. Kolom komentar ini dapat berisi teks arbitrer, termasuk teks dengan koma di dalamnya. Untuk mencegah membagi dari memisahkan teks kolom ini, kita dapat mengatur jumlah kolom maksimum untuk dibagi.

catatan: Ini hanya akan berfungsi jika string komentar dengan teks arbitrer adalah kolom terakhir dari tabel.

Untuk membatasi jumlah split yang akan dilakukan oleh metode split, berikan jumlah field dalam string sebagai argumen kedua ke metode split, seperti ini:

#! / usr / bin / env ruby
str = "10,20,30, Sepuluh, Dua Puluh dan Tiga Puluh"
menempatkan str.split (/, * /, 4)
$ ./3.rb
10
20
30
Sepuluh, Dua Puluh dan Tiga Puluh

Contoh Bonus!

Bagaimana jika Anda ingin menggunakannya membagi untuk mendapatkan semua barang kecuali yang pertama?

Ini sebenarnya sangat sederhana:

pertama, * sisanya = ex.split (/, /)

Mengetahui Batasannya

Metode split memiliki beberapa batasan yang agak besar.

Ambil contoh string '10, 20, "Bob, Eve and Mallory", 30 '. Yang dimaksud adalah dua angka, diikuti oleh string yang dikutip (yang mungkin mengandung koma) dan kemudian nomor lainnya. Split tidak dapat dengan benar memisahkan string ini menjadi bidang.

Untuk melakukan ini, pemindai string harus stateful, Yang berarti ia dapat mengingat apakah itu di dalam string yang dikutip atau tidak. Pemindai terpisah tidak stateful, sehingga tidak dapat memecahkan masalah seperti ini.