我该如何编写一个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
被称为修饰符,在这种情况下,它表示多行,意思是访问许多行,而不仅仅是默认行为下的一行。
因此,/\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, '')
的意思是删除字符串开头和结尾的任何一连串空格。
Ruby
。但为什么它不能有科学库,这样我才能真正使用它呢? - WestCoastProjectsinput = <<X
aa bbb
cc dd ee
X
input.strip.split(/\s+/)
input.split(" ")
将补偿所有空格,包括空格、制表符或换行符,得到以下结果:
["aa", "bbb", "cc", "dd", "ee"]
input.split("\s")
"\s"
而不是/\s/
,则空格将从结果中移除。
String#split
。不知道为什么直到现在才有人提到... - Ajedi32