在我的程序中,我想在字符串中添加双字母的方法。我的问题是有一个公共方法吗?例如:
'The'
→TThhee'
这就是我所拥有的:
puts "Please enter text: "
input = gets
letters = input.chomp.to_s
puts "You entered: " + letters + "."
list_letters = letters.split(//)
list = list_letters.join(". ")* 2.to_i
puts "Your text is made up of the letters: " + list + "."
答案 0 :(得分:4)
letters.gsub(/(.)/, '\1\1')
甚至更短:
letters.gsub(/./, '\&\&')
更舒服一点:
class String
def char_duplicate
self.gsub(/./, '\&\&')
end
end
puts "abc".char_duplicate #aabbcc
puts "abca".char_duplicate #aabbccaa
您的示例代码会有所不同。也许你想做类似的事情:
letters.split(//).map{|x| x * 2 }.join
或
letters.each_char.map{|x| x * 2 }.join
答案 1 :(得分:3)
只是为了与众不同:
(['The'.each_char.to_a]*2).transpose.join
答案 2 :(得分:1)
你可以在一条线上完成所有这一切,即使有些做作。我已经去注射,因为我认为没有复制空格会很好。
>> "foo bar".chomp.split("").inject([]) { |a,l| l =~ /\S/ ? a << l*2 : a << l }.join("")
=> "ffoooo bbaarr"
编辑:第二个想法,你也可以
>> "foo bar".gsub(/\S/, '\&\&')
=> "ffoooo bbaarr"
去展示我最近做的Ruby有多少=)
答案 3 :(得分:0)
我会像@knut那样做。然而,对于有趣的多样性,还有更多:
irb(main):002:0> s.chars.map{ |c| c*2 }.join
#=> "TThhee"
irb(main):004:0> s.chars.zip(s.chars).join
#=> "TThhee"
irb(main):005:0> s.chars.inject(""){ |d,c| d << c << c }
#=> "TThhee"
irb(main):010:0> "".tap{ |d| s.each_char{ |c| d << c*2 } }
#=> "TThhee"