Removendo caracteres com o método trim no Ruby

02/08/07

Já precisou remover caracteres de uma string, com funções semelhantes a trim, rtrim e ltrim do PHP? Pois é! No Ruby você não tem isso nativamente. Para adicionar tais funcionalidades, basta estender a classe String com os métodos abaixo.

class String
  def trim!(chars)
    rtrim!(chars)
    ltrim!(chars)
  end
 
  def rtrim!(chars)
    gsub!(/(#{trim_prepare(chars)})+$/, ")
  end
 
  def ltrim!(chars)
    gsub!(/^(#{trim_prepare(chars)})+/, ")
  end
 
  def trim(chars)
    dup.rtrim(chars).ltrim(chars)
  end
 
  def rtrim(chars)
    dup.rtrim!(chars)
  end
 
  def ltrim(chars)
    dup.ltrim!(chars)
  end
 
  private
    def trim_prepare(chars)
      chars = chars.split("").collect { |char| Regexp.escape(char) }
      chars.join('|')
    end
end

Seu funcionamento é muito semelhante às funções do PHP. Veja:

text = '|_ ruby _|'
puts text.trim(' _|')  # both sides
puts text.ltrim(' _|') # left side
puts text.rtrim(' _|') # right side

Lembre-se que você não precisa passar os caracteres que serão removidos na ordem em que eles aparecem.

Comentários #


#1 Eduardo Fiorezi disse:
03 Ago 07, 10:47AM

Olá Nando,

Bem que o método strip poderia receber este parametro.
Para quem quer apenas retirar os espaços em branco, o strip, lstrip e o rstrip quebra o galho.

http://www.ruby-doc.org/core/classes/String.html#M000835

Abraços,
Eduardo

#2 Nando Vieira disse:
03 Ago 07, 10:56AM

Exatamente. Não entendo como o Matz não pensou nisso! :)
Tem o chomp, mas ele só remove 1 caracter e apenas do final da string. Então, puts '__'.chomp('_') irá retornar "_".

Deixe um comentário




Este blog usa o Gravatar.


Não é aceito código HTML:
adicione-o no pastie.caboo.se ou paste.milk-it.net e poste apenas o link.

Se este é seu primeiro comentário, ele terá que ser aprovado antes de ser exibido.