如何编写一个 Ruby 函数,通过任何类型的空格分割输入,并从结果中删除所有空格?例如,如果输入是
aa bbb
cc dd ee
然后返回一个数组["aa", "bbb", "cc", "dd", "ee"]
。
如何编写一个 Ruby 函数,通过任何类型的空格分割输入,并从结果中删除所有空格?例如,如果输入是
aa bbb
cc dd ee
然后返回一个数组["aa", "bbb", "cc", "dd", "ee"]
。
这是 的默认行为String#split
:
input = <<-TEXT
aa bbb
cc dd ee
TEXT
input.split
结果:
["aa", "bbb", "cc", "dd", "ee"]
这适用于我测试的所有 Ruby 版本,包括 1.8.7、1.9.3、2.0.0 和 2.1.2。
以下应该适用于您提供的示例:
str.gsub(/\s+/m, ' ').strip.split(" ")
它返回:
["aa", "bbb", "cc", "dd", "ee"]
代码含义:
/\s+/m
是更复杂的部分。\s
表示空白,因此\s+
表示一个或多个空白字母。在该/m
部分中,m
称为修饰符,在这种情况下,它表示multiline,表示访问多行,而不仅仅是默认行为。所以,/\s+/m
意味着,找到一个或多个空格的序列。
gsub
表示全部替换。
strip
相当于trim
其他语言中的 ,并从字符串的开头和结尾删除空格。
因为,我正在写解释,这可能是你在字符串的末尾或开头以结尾字符结尾的情况。
为了安全
代码可以写成:
str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")
所以如果你有:
str = "\n aa bbb\n cc dd ee\n\n"
然后你会得到:
["aa", "bbb", "cc", "dd", "ee"]
新代码的含义:
^\s+
字符串开头的一系列空格
\s+$
字符串末尾的一系列空格
所以gsub(/^\s+|\s+$/m, '')
意味着删除字符串开头和字符串结尾的任何空格序列。
input = <<X
aa bbb
cc dd ee
X
input.strip.split(/\s+/)
input.split("\s")
如果"\s"
使用 代替/\s/
,则会从结果中删除空格。
作为对 Vidaica 答案的轻微修改,在 Ruby 2.1.1 中,它看起来像
input.split(" ")
将补偿所有空格,无论是空格、制表符还是换行符,产生:
["aa", "bbb", "cc", "dd", "ee"]