新手问题 ruby 字符串的一些操作问题

lufeihaidao · 2013年03月29日 · 最后由 doitian 回复于 2013年03月29日 · 2757 次阅读

给定一个字符串 s="......",大概好几千的字符的样子

  1. ruby 怎样像 python 那样,依靠 s[i::5] 可以从第 i 个字符开始每隔 5 个重新构成一个字符串。我能想到的是: s.each_char.with_index{|c,idx| another_s<<c if idx%5==i},不知有没有简洁的方法

  2. 假如 s 长度为 1000,怎样在每 100 个字符后添加一个 "\n",重新构成一个长为 1010 的字符串?

第二个问题的背景是,我想对 s 中每 100 个字符作正则替换

rails 的 Array 拓展可以解决你的问题 1、s.each_char[0..-1].in_groups_of(5) 2、s.each_char.in_groups_of(100).map(&:join).join("\n")

#3 楼 @doitian 好高级 我竟然都没用过原生的 一直用 rails 的...

String 用 scan 也可以

s.scan(/.{1,5}/m) # 如果不是 5 的倍数用 {5} 最后一块不会返回

更方便的是用 gsub 加 block 直接完成替换

s.gsub(/.{1,5}/m) {|m| m + "\n"}

补充:不加 m 会跳过换行

string = '.........'
rows = (string.size/5) == 0 ? string.size/5 : (string.size/5) + 1
rows.times do |i|
  string[i * 5, 5].each do |str|
    #JUST DO IT
  end
end

第一个问题暂时想到用 range step:

(i..s.length).step(5).collect {|e| s[e]}.join

@zj0713001 我说怎么你的方法我不能用呢……

我看了下,对第二问而言,@doitian each_con 似乎没有 each_slice 更方便

非常感谢 @doitian s.gsub(/.{1,5}/m) {|m| m + "\n"} 非常方便

#8 楼 @lufeihaidao 嗯,应该是用 each_slice

需要 登录 后方可回复, 如果你还没有账号请 注册新账号