[英]Split string by spaces into an array
我想讓用戶輸入一些單詞,然后將它們轉換為數組。 我想逐字逐句地分開。 這是一個例子:
"15 17 21 46"
→ [15, 17, 21, 46]
像split("")
和scan
這樣的東西會在每個字母中形成一個數組。
我更喜歡不使用YAML。 另外,請注意示例中它不包含空格,但它將這些空間用作值之間的間隔。
有可能做我在上面的例子中做的事情,我有一堆帶空格的數字,那些直接轉換為整數? 我覺得空間可能會打斷它,以防我做類似to_i
事情。
這個問題類似於Ruby中的String to Array ,但它沒有答案。
如果要分割空格, String#split
實際上不需要參數:
"15 17 21 46".split
#=> ["15", "17", "21", "46"]
如果要指定參數,則需要使用空格,而不是空字符串:
"15 17 21 46".split(' ')
#=> ["15", "17", "21", "46"]
如果你想將這些字符串轉換為整數:
"15 17 21 46".split(' ').map(&:to_i)
#=> [15, 17, 21, 46]
Eric Duminil的回答顯示了如何將字符串拆分為內容不是 - 空格。 如果您知道您的字符串僅包含感興趣的數字和空格,則完全有效。
您還可以根據您的需要收集元素 - 數字與您不想要的數字 - 數字之間的空格。
要在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
。 對於未完全轉換為整數vs to_i
字符串, Integer
將引發異常,這將轉換前幾個並靜默忽略其他任何內容:
> '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>'
同樣,這取決於字符串和你的目標,知道哪個是“正確的”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.