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

Mel*_*bel 17 ruby arrays string whitespace

我有一个单词数组,我试图删除可能存在于单词开头而不是结尾的任何空格.rstrip!只需要处理字符串的结尾.

example_array = ['peanut', ' butter', 'sammiches']
desired_output = ['peanut', 'butter', 'sammiches']
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,并非数组中的所有元素都有空白问题,因此如果所有元素都以单个空格字符开头,我就不能像删除第一个字符一样删除第一个字符.

完整代码:

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

用户可以在表单上输入的示例文本:

Corn on the cob,
Fibonacci,
StackOverflow
Chat, Meta, About
Badges
Tags,,
Unanswered
Ask Question
Run Code Online (Sandbox Code Playgroud)

And*_*imm 29

String#lstrip(或String#lstrip!)是你所追求的.

desired_output = example_array.map(&:lstrip)
Run Code Online (Sandbox Code Playgroud)

关于您的代码的更多评论:

  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(/, */)(或者/, ?/如果最多应该有一个空格)

所以现在它看起来像:

words = params[:word].gsub("\n", ",").split(/, ?/)
words.reject!(&:empty?)
words.each(&:lstrip!)
Run Code Online (Sandbox Code Playgroud)

如果您有可用的示例文本,我将能够提供更多建议.

编辑:好的,这里是:

temp_array = text.split("\n").map do |line|
  fields = line.split(/, */)
  non_empty_fields = fields.reject(&:empty?)
end
temp_array.flatten(1)
Run Code Online (Sandbox Code Playgroud)

使用的方法是String#split,Enumerable#map,Enumerable#rejectArray#flatten.

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

  • 只是添加... String.strip将处理前导和尾随空格 (2认同)

Ami*_*ler 10

> ' string '.lstrip.chop
=> "string"
Run Code Online (Sandbox Code Playgroud)

剥去两个白色空间......

  • 对于David的评论:我们可以使用`.strip`来获得与`.lstrip.rstrip`相同的结果http://ruby-doc.org/core-2.2.2/String.html#method-i-strip (10认同)
  • 怎么样'string'.lstrip.rstrip as .chop会从最后删除一个字符 (6认同)