2012-03-21 17 views
20

Bir dizgim var ve bu dizenin son karakterinin * olup olmadığını kontrol etmem gerekiyor ve eğer varsa, onu kaldırmam gerekiyor. '*' Sembolü dizesinin SON karakter iseraylar üzerinde yakut, bir * işareti varsa son karakteri değiştirin *

if stringvariable.include? "*" 
newstring = stringvariable.gsub(/[*]/, '') 
end 

yukarıdaki arama yapmaz.

Son karakterin '*' olup olmadığını nasıl kontrol ederim? Sadece çizgi sonunu maç için herhangi bir öneri

cevap

44

Kullanım $ çapa için

Teşekkür: * dizesinin ucunda birden fazla olması orada olasılığı varsa

"sample*".gsub(/\*$/, '') 

(ve siz) hepsini değiştirmek istiyor kullanın:

"sample**".gsub(/\*+$/, '') 
+0

teşekkürler, ben :) – Kim

+0

teşekkür arıyordu aynen böyle, bana yardım böylece çok – harsh4u

+0

Bu cevap döndürülen değere üzerinde çalışmasına gerek yukarıda ki hatırda tutulmalıdır. Yerinde değiştirme kullanımı için '.gsub!' –

1

bir normal ifadeler kullanabilirsiniz ya da sadece dize birleştirebilirler ya:

Sadece Yakut 1.9.x çalışır
if string_variable[-1] == '*' 
    new_string = string_variable.gsub(/[\*]/, '') # note the escaped * 
end 

...

Aksi takdirde bir normal ifadeler kullanabilirsiniz gerekir:

if string_variable =~ /\*$/ 
    new_string = string_variable.gsub(/[\*]/, '') # note the escaped * 
end 

Ama daha if gerekmez:

new_string = string_variable.gsub(/\*$/, '') 
1

Varsa, rahatsız edici karakteri kaldıracak aşağıdakileri yapabilirsiniz. Eğer karakterin birden fazla yerde görüldüğünü kaldırmak isterseniz

your_string.sub(/\*$/, '') 

, yapabileceğiniz:: Tabii

your_string.sub(/\*+$/, '') 

, sen yerinde dizesini değiştirmek istiyorsanız Aksi takdirde hiçbir şey yapacağız , alt kullanın! yerine alt

alkış, Aaron

8

Dize bir end_with? yöntemi vardır

stringvariable.chop! if stringvariable.end_with? '*' 
25

da kullanabilirsiniz varsayılan olarak izleyen kayıt ayırıcı karakteri (ler) kaldırır chomp (see it on API Dock), fakat Ayrıca bir argüman alabilir ve sonra dizgenin sonunu yalnızca belirtilen karakterle eşleştiğinde kaldıracaktır.

"hello".chomp   #=> "hello" 
"hello\n".chomp   #=> "hello" 
"hello\r\n".chomp  #=> "hello" 
"hello\n\r".chomp  #=> "hello\n" 
"hello\r".chomp   #=> "hello" 
"hello \n there".chomp #=> "hello \n there" 
"hello".chomp("llo")  #=> "he" 
"hello*".chomp("*")  #=> "hello" 
+0

gerçekten diğer cevaplardan daha fazla yardımcı oldu – vishB

İlgili konular