代码之家  ›  专栏  ›  技术社区  ›  bragboy

如何获取Ruby中字符串中出现的奇怪文本

  •  2
  • bragboy  · 技术社区  · 14 年前

    我有一个字符串,我想从中得到另一个字符串,其中只有奇数个发生位置的字符。

    例如,如果我有一个名为abcdefgh的字符串,我期望的输出是aceg,因为字符索引分别为0、2、4、6。我用一个循环来实现它,但是Ruby中应该有一行实现(可能使用regex?).

    5 回复  |  直到 14 年前
        1
  •  2
  •   lest    14 年前

    下面是一行解决方案:

    "BLAHBLAH".split('').enum_for(:each_with_index).find_all { |c, i| i % 2 == 0 }.collect(&:first).join
    

    或:

    ''.tap do |res|
      'BLAHBLAH'.split('').each_with_index do |char, index|
        res << c if i % 2 == 0
      end
    end
    

    还有一个变种:

    "BLAHBLAH".split('').enum_slice(2).collect(&:first).join
    
        2
  •  3
  •   John La Rooy    14 年前
    >> "ABCDEFGH".gsub /(.)./,'\1'
    => "ACEG"
    
        3
  •  2
  •   Chubas    14 年前

    其他一些方法:

    使用 Enumerable 方法

    "BLAHBLAHBLAH".each_char.each_slice(2).map(&:first).join
    

    使用 regular expressions :

    "BLAHBLAHBLAH".scan(/(.).?/).join
    
        4
  •  1
  •   Paul Rubel    14 年前

    不确定运行时的速度,但这只是一个处理过程。

    res =  ""; 
    "BLAHBLAH".scan(/(.)(.)/) {|a,b| res += a}
    res # "BABA"
    
        5
  •  1
  •   ennuikiller    14 年前
    (0..string.length).each_with_index { |x,i| puts string[x] if i%2 != 0 }