将空格分割为数组

时间:2017-07-04 16:27:42

标签: arrays ruby string

我想让用户输入一些单词,然后将它们转换为数组。我想逐字逐句地分开。这是一个例子:

"15 17 21 46"[15, 17, 21, 46]

split("")scan这样的东西会在每个字母中形成一个数组。

我更喜欢不使用YAML。另外,请注意示例中它不包含空格,但它将它们用作值之间的间隔。

有可能做我在上面的例子中做的事情,我有一堆带空格的数字,那些直接转换为整数?如果我做to_i之类的事情,我觉得这些空格可能会打断它。

这个问题类似于String to Array in Ruby,但它没有答案。

2 个答案:

答案 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_iInteger会针对未完全转换为整数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>'

同样,这取决于字符串和你的目标,知道哪个是'正确'。