如何在n子串中拆分字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在n子串中拆分字符串?相关的知识,希望对你有一定的参考价值。

我从ruby开始,我遇到了问题。我想在许多子字符串中拆分一个字符串。

例如,我有这个字符串:

str = "a9547e"

我想将它分成两个三个字符的子串或两个字符的三个子串。我得到类似的东西:

str = ["a9","54","7e"]
str = ["a94","47e"]

我尝试了不同的东西,但没有任何作用。

答案

不确定我完全理解这个意图,但是这样的事情怎么样

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"]
另一答案

我假设给出了组大小,如果字符串的长度不能按组大小均匀分配,则方法是返回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

以上是关于如何在n子串中拆分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

字符串

数据结构(十五)串的顺序存储结构(顺序串)

mysql截取子串后更新

leetcode 763. Partition Labels 划分字母区间(中等)

Erlang分布了反向字符串

第四章——串