我正在处理一个问题,我被给予了一个"编码"消息以字符串的形式,并且必须返回已解码的消息。这需要我将一串混合字符和数字拆分成一个数组。例如,如果我得到这样的字符串:
"0h"
我想把它拆分成这样的数组:
[0, "h"]
但是当我使用.split
时,我得到了
["0", "h"]
我找到的解决方案只考虑所有数字的字符串,但不考虑混合字符串。有没有办法在保留字符的同时将数字字符串转换为数字?
答案 0 :(得分:4)
您可以将String#scan与正则表达式一起使用。
str = "0hh1ghi22d"
str.scan(/\d+|\D+/).map { |s| s =~ /\d+/ ? s.to_i : s }
#=> [0, "hh", 1, "ghi", 22, "d"]
或
str.each_char.map { |s| s =~ /\d/ ? s.to_i : s }
#=> [0, "h", "h", 1, "g", "h", "i", 2, 2, "d"]
取决于要求。
答案 1 :(得分:1)
如果我理解正确,您希望字符串中的数字最终为数组中的Fixnums。
您可以通过向.map
split
来完成此操作
... .map { |c| c =~ /\d/ ? c.to_i : c }