给定一系列分割位置,如何拆分字符串?

时间:2017-01-08 20:17:54

标签: ruby-on-rails arrays ruby string split

我正在使用Ruby 2.4和Rails 5.我在一行中有一系列索引

[5,8,10]

如何获取上述数组和字符串,并形成由上述索引拆分的字符串的anotehr数组?如果字符串是

,则为实例
abcdefghijklmn

并基于以上索引拆分它,我将有一个包含以下字符串的数组

abcde
fgh
ij
klmn

2 个答案:

答案 0 :(得分:2)

试试这个

str = "abcdefghijklmn"
positions = [5, 8, 10]

parts = [0, *positions, str.size].each_cons(2).map { |a, b| str[a...b] }
# => ["abcde", "fgh", "ij", "klmn"]

或者,

如果这些位置是恒定的并且在运行时之前已知(例如,如果它们是电话号码或信用卡的格式),那么只需使用正则表达式

str.match(/(.....)(...)(..)(.*)/).captures
# => ["abcde", "fgh", "ij", "klmn"]

答案 1 :(得分:0)

这将完成工作

str = "abcdefghijklmn"
arr_1 = [5, 8, 10]
arr_2, prev = [], 0

(arr_1.length + 1).times do |x|
  if arr_1[x] == nil then arr_1[x] = str.size end
  arr_2 << str[prev..arr_1[x] -1]
  prev = arr_1[x] 
end

p arr_2

---------------------------------------
     Program Run Output

["abcde", "fgh", "ij", "klmn"]
---------------------------------------

我希望这有助于