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)
有关您的代码的更多评论:
-
delete_if {|x| x == ""}
delete_if {|x| x == ""}
可以替换为delete_if(&:empty?)
- 除了你想
reject!
因为delete_if
只会返回不同的数组,而不是修改现有的数组。 -
words.each {|e| e.lstrip!}
words.each {|e| e.lstrip!}
可以替换为words.each(&:lstrip!)
- 如果您在Windows机器上读取Windows风格的文本文档,或在Unix机器上读取Unix风格的文档,则
delete("\r")
应该是多余的 -
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#split
, Enumerable#map
, Enumerable#reject
和Array#flatten
。
Ruby也有用于解析逗号分隔文件的库,但我认为它们在1.8和1.9之间有点不同。
> ' string '.lstrip.chop => "string"
剥去两个白色空间……