我想让用户输入一些单词,然后将它们转换为数组。我想逐字逐句地分开。这是一个例子:
"15 17 21 46"
→[15, 17, 21, 46]
像split("")
和scan
这样的东西会在每个字母中形成一个数组。
我更喜欢不使用YAML。另外,请注意示例中它不包含空格,但它将它们用作值之间的间隔。
有可能做我在上面的例子中做的事情,我有一堆带空格的数字,那些直接转换为整数?如果我做to_i
之类的事情,我觉得这些空格可能会打断它。
这个问题类似于String to Array in Ruby,但它没有答案。
答案 0 :(得分:4)
String#split
实际上不需要参数:
specific.yaml
如果要指定参数,则需要使用空格,而不是空字符串:
"15 17 21 46".split
#=> ["15", "17", "21", "46"]
如果你想将这些字符串转换为整数:
"15 17 21 46".split(' ')
#=> ["15", "17", "21", "46"]
答案 1 :(得分:1)
Eric Duminil的answer展示了如何将字符串拆分为内容不是 - 空格。如果您知道您的字符串仅包含感兴趣的数字和空格,则完全有效。
您还可以根据自己的需要收集元素 - 数字与您不想要的数字 - 数字之间的空格。
要在Ruby中执行此操作,请使用带有.scan
的正则表达式:
> "15 17 21 46".scan(/\d+/)
=> ["15", "17", "21", "46"]
或者,如果您在字符串中嵌入了您不想要的数字:
> "15 17 21 46 123abc 34".scan(/\b\d+\b/)
=> ["15", "17", "21", "46", "34"]
请注意,123
不包括在内,因为它是字符串123abc
的一部分,而不是:
> "15 17 21 46 123abc 34".scan(/\d+/)
=> ["15", "17", "21", "46", "123", "34"]
这包括123
,因为单词break \b
不是正则表达式的一部分。
如果您只是拆分空格:
> "15 17 21 46 123abc 34".split
=> ["15", "17", "21", "46", "123abc", "34"]
'正确答案'是基于您的目标和数据。
然后您可以将这些值转换为整数:
"15 17 21 46 123abc 34".scan(/\b\d+\b/).map {|s| Integer(s) }
=> [15, 17, 21, 46, 34]
请注意,我正在呼叫Integer
与更宽松的.to_i
。 Integer
会针对未完全转换为整数vs to_i
的字符串引发异常,该字符将转换前几个并静默忽略其他内容:
> '1.5E+06'.to_i
=> 1
> Integer('1.5E+06')
ArgumentError: invalid value for Integer(): "1.5E+06"
from (irb):19:in `Integer'
from (irb):19
from /usr/local/bin/irb:11:in `<main>'
同样,这取决于字符串和你的目标,知道哪个是'正确'。