Ruby:删除字符串开头的空格字符

时间:2011-04-29 07:12:09

标签: ruby arrays string whitespace

我有一个单词数组,我试图删除可能存在于单词开头而不是结尾的任何空格。 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

2 个答案:

答案 0 :(得分:29)

String#lstrip(或String#lstrip!)为what you're after

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. 如果你在Windows机器上读取Windows风格的文本文档,或者在Unix机器上读取Unix风格的文档,
  5. delete("\r")应该是多余的
  6. split(",")可以替换为split(", ")split(/, */)(如果最多只有一个空格,则为/, ?/
  7. 所以现在看起来像:

    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#splitEnumerable#mapEnumerable#rejectArray#flatten

    Ruby还有用于解析逗号分隔文件的库,但我认为它们在1.8和1.9之间有点不同。

答案 1 :(得分:9)

> ' string '.lstrip.chop
=> "string"

剥去两个空格......