我从红宝石开始,但遇到了问题。 我想将字符串拆分为许多子字符串。
例如,我有以下字符串:
str = "a9547e"
我想将其分为三个字符的两个子字符串或两个字符的三个子字符串。我得到这样的东西:
str = ["a9","54","7e"]
str = ["a94","47e"]
我尝试了不同的方法,但没有任何效果。
答案 0 :(得分:2)
不确定我是否完全理解意图,但是类似这样的东西
def string_splitter(str,group_length)
str.each_char.each_slice(group_length).map(&:join)
end
str = "a9547e"
string_splitter(str,2)
#=> ["a9","54","7e"]
string_splitter(str,3)
#=> ["a94","47e"]
注意如果字符串不能被整除,这将提供不均匀的结尾组,例如
str = "a9547eP"
string_splitter(str,2)
#=> ["a9","54","7e", "P"]
答案 1 :(得分:0)
我假设给出了组大小,并且如果字符串的长度不能被组大小均分,则该方法将返回nil
。
def split_in_groups(str, group_size)
n, rem = str.size.divmod(group_size)
str.scan(/.{#{n}}/) if rem.zero?
end
split_in_groups("a9547e", 2)
#=> ["a95", "47e"]
split_in_groups("a9547e", 3)
#=> ["a9", "54", "7e"]
split_in_groups("a9547e", 1)
#=> ["a9547e"]
split_in_groups("a9547e", 5)
#=> nil
例如,如果
str = "a9547e"
group_size = 2
然后
n, rem = str.size.divmod(group_size)
#=> [3, 0]
n #=> 3 (same as str.size/group_size)
rem
#=> 0 (remainder)
str.scan(/.{#{n}}/) if rem.zero?
#=> str.scan(/.{3}/) if true
#=> str.scan(/.../)
#=> ["a95", "47e"]
请参见Integer#divmod(一种非常有用但未充分利用的方法)和String#scan。