Ruby'de "Split" Yöntemi Nasıl Kullanılır

Bildiğiniz gibi, dizeler Yakut olarak bilinen şey birinci sınıf nesneler sorgular ve manipülasyon için çeşitli yöntemler kullanır.

En temellerden biri dize düzenleme eylemler bir dizeyi birden çok alt dizeye bölmektir. Bu, örneğin,"foo, bar, baz" ve sen üç ipi istiyorsun "foo", "bar" ve "baz". Bölünmüş String sınıfının yöntemi bunu sizin için başarabilir.

"Split" in Temel Kullanımı

En temel kullanımı Bölünmüş yöntemi, bir dizeyi tek bir karaktere veya statik karakter dizisine dayalı olarak bölmektir. Split öğesinin ilk bağımsız değişkeni bir dize ise, bu dizedeki karakterler dize ayırıcı sınırlayıcı olarak kullanılırken, virgülle ayrılmış verilerde virgül verileri ayırmak için kullanılır.

#! / usr / bin / env yakut
str = "foo, bar, baz"
str.split (",") ifadesini koyar
$ ./1.rb
foo
bar
baz

Normal İfadelerle Esneklik Ekleme

Sınırlandırmanın daha kolay yolları vardır sicim. Sınırlayıcı olarak normal bir ifade kullanmak split yöntemini çok daha esnek hale getirir.

Yine, örneğin dizeyi "foo, bar, baz"

instagram viewer
. İlk virgülden sonra bir boşluk var, ama ikinciden sonra değil. "," Dizgisi bir sınırlayıcı olarak kullanılırsa, "bar" dizesinin başında bir boşluk bulunmaya devam eder. "," Dizesi kullanılırsa (virgülden sonraki boşlukla), ikinci virgülün arkasından boşluk kalmadığından yalnızca ilk virgülle eşleşir. Çok sınırlayıcı.

Bu sorunun çözümü, dize yerine sınırlayıcı argümanınız olarak normal bir ifade kullanmaktır. Normal ifadeler, yalnızca statik karakter dizilerini değil, aynı zamanda belirsiz sayıda karakteri ve isteğe bağlı karakterleri de eşleştirmenizi sağlar.

Normal İfadeler Yazma

Sınırlayıcınız için normal bir ifade yazarken ilk adım, sınırlayıcının ne olduğunu kelimelerle açıklamaktır. Bu durumda, "bir veya daha fazla boşluk izleyebilecek bir virgül" ifadesi makuldür.

Bu normal ifadenin iki öğesi vardır: virgül ve isteğe bağlı boşluklar. Boşluklarda "sıfır veya daha fazla" anlamına gelen * (yıldız veya yıldız) nicelik belirteci kullanılır. Bundan önce gelen öğeler sıfır veya daha fazla kez eşleşir. Örneğin, normal ifade /a*/ sıfır veya daha fazla 'a' karakteriyle eşleşir.

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

Bölme Sayısını Sınırlama

Gibi virgülle ayrılmış bir değer dizesi düşünün "10,20,30, Bu rastgele bir dizedir". Bu biçim üç sayıdan sonra bir yorum sütunu gelir. Bu yorum sütunu, içinde virgül bulunan metin de dahil olmak üzere rastgele metin içerebilir. Önlemek Bölünmüş bu sütunun metnini bölmekten, bölünecek maksimum sütun sayısını ayarlayabiliriz.

Not: Bu yalnızca rastgele metin içeren yorum dizesi tablonun son sütunu ise işe yarar.

Split yönteminin gerçekleştireceği bölünme sayısını sınırlamak için, dizedeki alan sayısını split yöntemine ikinci bağımsız değişken olarak iletin, örneğin:

#! / usr / bin / env yakut
str = "10,20,30, On, Yirmi ve Otuz"
str.split (/, * /, 4) koyar
$ ./3.rb
10
20
30
On, Yirmi ve Otuz

Bonus Örneği!

Kullanmak istersen Bölünmüş ilk öğeleri hariç tüm öğeleri almak için?

Aslında çok basit:

ilk olarak, * rest = ex.split (/, /)

Sınırlamaları bilmek

Bölme yönteminin bazı büyük sınırlamaları vardır.

Örneğin dizeyi ele alalım '10, 20, "Bob, Havva ve Mallory", 30 '. Amaçlanan iki sayı, ardından tırnak işareti (virgül içerebilir) ve ardından başka bir sayı gelir. Böl, bu dizeyi alanlara doğru şekilde ayıramaz.

Bunu yapmak için, dize tarayıcı Duruma, yani alıntılanan bir dizenin içinde olup olmadığını hatırlayabilir. Bölünmüş tarayıcı durum bilgisi yoktur, bu nedenle bu gibi sorunları çözemez.

instagram story viewer