2011-04-30 27 views
16

cadenas dado como:¿Cómo eliminar una coma al final?

Bob 
Bob, 
Bob 
Bob Burns, 

¿Cómo se puede volver que w/o una coma?

Bob 
Bob 
Bob 
Bob Burns 

Además, me gustaría que este método no se rompa si pasa un cero, solo para devolver un nil?

def remove_trailing_comma(str) 
    !str.nil? ? str.replace(",") :nil 
end 
+0

El código que proporcionó no funcionaría, porque no tiene comillas alrededor de la coma, y ​​es '! Str.nil? ? 'not'! str.nil? '. Utilice IRB para verificar su código la próxima vez. –

Respuesta

37

Mi idea sería utilizar string.chomp:

Devuelve una nueva cadena con el separador de registro dado eliminado del final de str (si está presente).

¿Hace esto lo que quiere?

def remove_trailing_comma(str) 
    str.nil? ? nil : str.chomp(",") 
end 
+0

muy limpio y elegante. Gracias – AnApprentice

+4

Es más elegante escribirlo como 'str.chomp (',') if (str)'. –

2

Se podría hacer algo como esto:

str && str.sub(/,$/, '') 
+0

Gracias bueno pero nils rompe ese "método privado' sub 'llamado nil: NilClass " – AnApprentice

+1

Sí, me di cuenta y actualicé el código. Debería funcionar ahora. De hecho, el método chomp es probablemente mejor: str && str.chomp (",") – robbrit

+0

Eso funciona muy bien. Gracias – AnApprentice

4

uso String#chomp

irb(main):005:0> "Bob".chomp(",") 
=> "Bob" 
irb(main):006:0> "Bob,".chomp(",") 
=> "Bob" 
irb(main):007:0> "Bob Burns,".chomp(",") 
=> "Bob Burns" 

ACTUALIZACIÓN:

def awesome_chomp(str) 
    str.is_a?(String) ? str.chomp(",") : nil 
end 
p awesome_chomp "asd," #=> "asd" 
p awesome_chomp nil #=> nil 
p awesome_chomp Object.new #=> nil 
+0

¿Qué pasa con el tratamiento de nils? método privado 'chomp 'llamado nil: NilClass): – AnApprentice

+0

¿Alguna razón para preferir' str.is_a? (String) 'a algo como' str.respond_to? (: chomp) '? –

Cuestiones relacionadas