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 

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

 desired_output = example_array.map(&:lstrip) 

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

  1. delete_if {|x| x == ""} delete_if {|x| x == ""}可以替换为delete_if(&:empty?)
  2. 除了你想reject! 因为delete_if只会返回不同的数组,而不是修改现有的数组。
  3. words.each {|e| e.lstrip!} words.each {|e| e.lstrip!}可以替换为words.each(&:lstrip!)
  4. 如果您在Windows机器上读取Windows风格的文本文档,或在Unix机器上读取Unix风格的文档,则delete("\r")应该是多余的
  5. split(",")可以用split(", ")split(/, */)替换(或/, ?/如果最多只有一个空格)

所以现在它看起来像:

 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之间有点不同。

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

剥去两个白色空间……