编辑:我通过使用strip!
到删除引导和尾随的空白,正如我在这个视频中所显示的来解决这个问题。然后,我接着通过迭代和添加空格来恢复数组中每个字符串末尾的空白。这个问题与"dupe“不同,因为,我的目的是将空白保留在的末尾。不过,脱衣服!将删除前导和尾随空格,如果这是您的意图。(我本可以回答这个问题,但由于这是一个错误的标记,我只能编辑我的原始问题来包含这个问题。)
我有一系列的单词,我试图删除任何空白,可能存在于单词的开头而不是结尾。雷丁!只是处理一根绳子的末端。我希望从字符串的开头删除空格。
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
发布于 2011-04-28 23:19:08
String#lstrip
(或String#lstrip!
)是你想要什么。
desired_output = example_array.map(&:lstrip)
关于您的代码的更多评论:
delete_if {|x| x == ""}
可以用delete_if(&:empty?)
代替reject!
,因为delete_if
只返回不同的数组,而不是修改现有的数组。words.each {|e| e.lstrip!}
可以用words.each(&:lstrip!)
代替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之间略有不同。
发布于 2014-05-19 12:24:24
> ' string '.lstrip.chop
=> "string"
剥去两个空白..。
https://stackoverflow.com/questions/5829051
复制相似问题