私は単語の配列を持っていますが、単語の最後ではなく最初に存在する可能性のある空白を削除しようとしています。 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
_String#lstrip
_(または_String#lstrip!
_)は 何をしているのか です。
_desired_output = example_array.map(&:lstrip)
_
コードに関するその他のコメント:
delete_if {|x| x == ""}
_はdelete_if(&:empty?)
で置き換えることができますreject!
_は既存の配列を変更するのではなく、異なる配列のみを返すため、_delete_if
_が必要な場合を除きます。words.each {|e| e.lstrip!}
_はwords.each(&:lstrip!)
で置き換えることができますdelete("\r")
は、WindowsマシンでWindowsスタイルのテキストドキュメントを読んでいる場合、またはUnixマシンでUnixスタイルのドキュメントを読んでいる場合は冗長である必要があります。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では少し異なると思います。
> ' string '.lstrip.chop
=> "string"
両方の空白を取り除きます...