JJ *_*eck 41 ruby whitespace split
如何编写一个Ruby函数,用任何类型的空格分割输入,并从结果中删除所有空格?例如,如果输入是
aa bbb
cc dd ee
Run Code Online (Sandbox Code Playgroud)
然后返回一个数组["aa", "bbb", "cc", "dd", "ee"].
Aje*_*i32 50
这是默认行为String#split:
input = <<-TEXT
aa bbb
cc dd ee
TEXT
input.split
Run Code Online (Sandbox Code Playgroud)
结果:
["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)
这适用于我测试的所有Ruby版本,包括1.8.7,1.9.3,2.0.0和2.1.2.
Can*_*ide 45
以下内容适用于您提供的示例:
str.gsub(/\s+/m, ' ').strip.split(" ")
Run Code Online (Sandbox Code Playgroud)
它返回:
["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)
代码含义:
/\s+/m是更复杂的部分.\s意思是白色空间,所以\s+意味着一个或多个白色空格字母.在该/m部分中,m被称为修饰符,在这种情况下,它意味着,多行,意味着访问许多行,而不仅仅是一个默认行为.因此,/\s+/m意味着,找到一个或多个空格的序列.
gsub 意味着全部替换.
strip与trim其他语言相同,并从字符串的前端和末尾删除空格.
因为,我正在编写解释,可能是在字符串的结尾或开头处最终得到和结束字符的情况.
为了安全起见
代码可以写成:
str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")
Run Code Online (Sandbox Code Playgroud)
所以如果你有:
str = "\n aa bbb\n cc dd ee\n\n"
Run Code Online (Sandbox Code Playgroud)
然后你会得到:
["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)
新代码的含义:
^\s+ 字符串开头的一系列空格
\s+$ 字符串末尾的一系列空格
因此,gsub(/^\s+|\s+$/m, '')意味着删除字符串开头和字符串末尾的任何空格序列.
saw*_*awa 21
input = <<X
aa bbb
cc dd ee
X
input.strip.split(/\s+/)
Run Code Online (Sandbox Code Playgroud)
作为对Vidaica答案的略微修改,在Ruby 2.1.1中它看起来像
input.split(" ")
Run Code Online (Sandbox Code Playgroud)
将补偿所有空格,无论是空格,制表符还是换行符,都会产生:
["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)