编辑:我通过使用 strip!
to remove leading and trailing whitespaces as I show in this video 解决了这个问题.然后,我通过遍历并添加空格来恢复每个字符串末尾的空格。这个问题与“欺骗”不同,因为我的意图是在末尾保留空白。然而,剥离!如果这是您的意图,将删除前导和尾随空格。 (我会把它作为一个答案,但由于它被错误地标记为欺骗,我只能编辑我的原始问题以包含它。)
我有一个单词数组,我试图删除单词开头而不是结尾处可能存在的任何空格。剥离!只处理字符串的结尾。我想从字符串的开头删除空格。
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!
)是 what you're after .
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")
如果您在 Windows 机器上阅读 windows 风格的文本文档,或者在 Unix 机器上阅读 Unix 风格的文档,则应该是多余的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 之间有点不同。
关于Ruby:删除字符串开头的空白字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829051/