簡體   English   中英

將空格分割為數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM