我想改变:
word = "Stackoverflow is awesome!"
成:
"StAcKoVeRfLoW Is aWeSoMe!"
我做了:
result = ""
a = word.length
odd = (1..a).select(&:odd?)
even = (1..a).select(&:even?)
odd.each {|i| even.each {|b| result += word[b].to_s}}
result # => "akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!akvrlwi wsm!"
答案 0 :(得分:3)
"Stackoverflow is awesome!"
.gsub(/(.)(.)?/){$1.upcase + $2.to_s.downcase}
# => "StAcKoVeRfLoW Is aWeSoMe!"
"Stackoverflow is awesome!"
.gsub(/./).with_index{|s, i| i.even? ? s.upcase : s.downcase}
# => "StAcKoVeRfLoW Is aWeSoMe!"
"Stackoverflow is awesome!"
.gsub(/..?/, &:capitalize)
# => "StAcKoVeRfLoW Is aWeSoMe!"
答案 1 :(得分:2)
以下是一些尚未提及的方法。
text = "Stackoverflow is awesome!"
text.downcase.dup.tap { |t| (0...t.size).step(2) { |i| t[i] = t[i].upcase } }
#=> "StAcKoVeRfLoW Is aWeSoMe!"
e = [:upcase, :downcase].cycle
"Stackoverflow is awesome!".gsub(/./) { |c| c.send e.next }
#=> "StAcKoVeRfLoW Is aWeSoMe!"
如果text
包含大写和小写字母的混合,则这两种方法都有效。
答案 2 :(得分:1)
可能有更聪明的方法可以做到这一点,但我认为这是最清楚的方法之一:
text = "Stackoverflow is awesome!"
for i in 0...text.length do
if i.even?
text[i] = text[i].upcase
else
text[i] = text[i].downcase
end
end
puts text
# Output:
# StAcKoVeRfLoW Is aWeSoMe!
答案 3 :(得分:1)
while ans = False:
<强>更新强>
删除了对第二个正则表达式匹配的依赖,就像Sawa的回答一样。
word = "Stackoverflow is awesome!"
word.scan(/(.)(.)/).inject('') {|s,(x,y)| s << x.upcase << y.downcase}
# => "StAcKoVeRfLoW Is aWeSoMe"
答案 4 :(得分:1)
试试这个:
word.downcase.chars.map.with_index { |c,i| i%2==0 ? c.upcase : c }.join
#=> "StAcKoVeRfLoW Is aWeSoMe!"