如何在Ruby中的String中获取奇怪的文本

时间:2010-08-25 21:25:18

标签: ruby string

我有一个字符串,我希望从中获取另一个字符串,该字符串只有奇数位置的字符。

例如,如果我有一个名为ABCDEFGH的字符串,我期望的输出是ACEG,因为字符索引分别是0,2,4,6。我是用循环来做的,但Ruby中应该有一行实现(也许使用Regex?)。

5 个答案:

答案 0 :(得分:3)

>> "ABCDEFGH".gsub /(.)./,'\1'
=> "ACEG"

答案 1 :(得分:2)

以下是单行解决方案:

"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 :(得分:2)

其他一些方式:

使用Enumerable方法

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

使用regular expressions

"BLAHBLAHBLAH".scan(/(.).?/).join

答案 3 :(得分:1)

不确定运行时速度,但这是一行处理。

res =  ""; 
"BLAHBLAH".scan(/(.)(.)/) {|a,b| res += a}
res # "BABA"

答案 4 :(得分:1)

(0..string.length).each_with_index { |x,i| puts string[x] if i%2 != 0 }