web-dev-qa-db-ja.com

Ruby:文字列の先頭にある空白文字を削除する

私は単語の配列を持っていますが、単語の最後ではなく最初に存在する可能性のある空白を削除しようとしています。 rstrip!文字列の終わりを処理するだけです。

example_array = ['peanut', ' butter', 'sammiches']
desired_output = ['peanut', 'butter', 'sammiches']

ご覧のとおり、配列のすべての要素に空白の問題があるわけではないため、すべての要素が単一の空白文字で始まっている場合のように、最初の文字を削除することはできません。

完全なコード:

words = params[:Word].gsub("\n", ",").delete("\r").split(",")
words.delete_if {|x| x == ""}
words.each do |e|
  e.lstrip!
end

ユーザーがフォームに入力できるサンプルテキスト:

Corn on the cob,
Fibonacci,
StackOverflow
Chat, Meta, About
Badges
Tags,,
Unanswered
Ask Question
18
Melanie Shebel

_String#lstrip_(または_String#lstrip!_)は 何をしているのか です。

_desired_output = example_array.map(&:lstrip)
_

コードに関するその他のコメント:

  1. _delete_if {|x| x == ""}_はdelete_if(&:empty?)で置き換えることができます
  2. _reject!_は既存の配列を変更するのではなく、異なる配列のみを返すため、_delete_if_が必要な場合を除きます。
  3. _words.each {|e| e.lstrip!}_はwords.each(&:lstrip!)で置き換えることができます
  4. delete("\r")は、WindowsマシンでWindowsスタイルのテキストドキュメントを読んでいる場合、またはUnixマシンでUnixスタイルのドキュメントを読んでいる場合は冗長である必要があります。
  5. split(",")は、split(", ")またはsplit(/, */)(または、スペースが1つ以下の場合は_/, ?/_)で置き換えることができます。

したがって、次のようになります。

_words = params[:Word].gsub("\n", ",").split(/, ?/)
words.reject!(&:empty?)
words.each(&:lstrip!)
_

サンプルテキストを入手できる場合は、さらにアドバイスを提供できます。

編集:わかりました、ここに行きます:

_temp_array = text.split("\n").map do |line|
  fields = line.split(/, */)
  non_empty_fields = fields.reject(&:empty?)
end
temp_array.flatten(1)
_

使用されるメソッドは、_String#split_、_Enumerable#map_、_Enumerable#reject_および_Array#flatten_です。

Rubyにはコンマ区切りファイルを解析するためのライブラリーもありますが、1.8と1.9では少し異なると思います。

29
Andrew Grimm
> ' string '.lstrip.chop
=> "string"

両方の空白を取り除きます...

10
Amir Mehler