2011-04-29 157 views
16

我有一个单词数组,我尝试删除可能存在于单词开头而不是末尾的任何空格。 rstrip!只是照顾字符串的末尾。Ruby:删除字符串开头的空白字符

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 
+1

我的第一个问题是,你如何创造这些阵列?通过使用子字符串抽取来分割一些其他字符串?如果是这样,您可能想要显示该代码,我们可以帮助解决根本原因。 – 2011-04-29 07:34:58

+0

刚刚添加了上面的完整代码。 :) – 2011-04-29 07:48:42

+1

你能否提供一些示例文本? – 2011-04-29 08:08:40

回答

27

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. delete("\r")如果你正在读一个Windows机器上的Windows风格的文本文档,或一台Unix机器
  5. split(",")在Unix风格的文件可以被替换应该是多余的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之间有点不同。

+1

当然是!我觉得自己像个白痴。一遍又一遍扫描了rdoc,但没有看到它。 – 2011-04-29 07:20:40

+2

只是为了增加... String.strip将照顾前导和尾随空格 – Vic 2011-04-29 07:22:37

+1

或者只是'a.each(&:lstrip!)'如果你想修改你的数组。 – 2011-04-29 07:28:21

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

头尾都空格...

+4

如何将'string'.lstrip.rstrip作为.chop将大卫的评论从末尾 – 2015-01-01 02:23:01

+7

中移除一个字符:我们可以使用'.strip'获得'.lstrip.rstrip'的相同结果http:// ruby -doc.org/core-2.2.2/String.html#method-i-strip – 2015-07-27 07:46:33

+0

考虑编辑您的答案以添加更正您的原始答案的更新。 – 2015-09-18 18:38:20