尝试将此重构为一行,以使字符串中的所有元音都大写。我尝试使用哈希,但失败了。尽管我尽最大努力查找它,但在Ruby上还是太新了解任何替代方案。类似...... str.gsub!(/aeiou/
def LetterChanges(str)
str.gsub!(/a/, "A") if str.include? "a"
str.gsub!(/e/, "E") if str.include? "e"
str.gsub!(/i/, "I") if str.include? "i"
str.gsub!(/o/, "O") if str.include? "o"
str.gsub!(/u/, "U") if str.include? "u"
puts str
end
答案 0 :(得分:7)
最好的方法是
str.tr('aeiou', 'AEIOU')
返回
str
的副本,from_str
中的字符替换为to_str
中的相应字符。如果to_str比from_str短,则用最后一个字符填充它以保持对应关系。
答案 1 :(得分:3)
您可以使用gsub
的第二个参数,即替换哈希:
str.gsub!(/[aeiou]/, 'a' => 'A', 'e' => 'E', 'i' => 'I', 'o' => 'O', 'u' => 'U')
或者,传递一个块:
str.gsub!(/[aeiou]/, &:upcase)
两者都将返回:
'this is a test'.gsub!(/[aeiou]/, 'a' => 'A', 'e' => 'E', 'i' => 'I', 'o' => 'O', 'u' => 'U')
# => "thIs Is A tEst"
'this is a test'.gsub!(/[aeiou]/, &:upcase)
# => "thIs Is A tEst"