2012-03-21 15 views
20

Mam ciąg znaków i muszę sprawdzić, czy ostatni znak tego ciągu jest *, a jeśli tak, to muszę go usunąć.ruby ​​na szynach, zamień ostatni znak, jeśli jest to znak *

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

Powyższe nie wyszukuje, czy symbol "*" jest ostatnim znakiem ciągu.

Jak sprawdzić, czy ostatni znak to "*"?

Dzięki za wszelkie sugestie

Odpowiedz

44

Korzystanie kotwica $ tylko dopasować koniec linii:

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

Jeśli istnieje możliwość istnienia więcej niż jednego * na końcu łańcucha (i chcesz je wszystkie wymienić) używać:

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

dzięki, to jest dokładnie to, co szukałem :) – Kim

+0

Dzięki, pomaga mi tak wiele – harsh4u

+0

Należy zauważyć, że z odpowiedzi powyżej trzeba działać na zwróconej wartości. W przypadku zastępowania w miejscu użyj '.gsub!' –

1

można użyć regex lub po prostu splatać ciągu:

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

To działa tylko w Ruby 1.9.x ...

W przeciwnym razie będziesz musiał użyć wyrażenia regularnego:

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

Ale nawet nie potrzebują if:

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

Możesz wykonać następujące czynności, które usuną obrażającą postać, jeśli jest obecna. W przeciwnym razie będzie to robić nic:

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

Jeśli chcesz usunąć więcej niż jedno wystąpienie znaku, można zrobić:

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

Oczywiście, jeśli chcesz zmodyfikować ciąg w miejscu , użyj sub! zamiast sub

Cheers, Aaron

8

String zawiera metodę end_with?

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

Można również użyć chomp (see it on API Dock), która usuwa znak (ów) rekord spływu separatora domyślnie, ale może również przyjąć argument, a następnie usunie koniec ciągu tylko wtedy, gdy pasuje do podanych znaków.

"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

naprawdę pomógł bardziej niż inne odpowiedzi – vishB