这是我的代码,我不确定为什么这不会返回预期的结果:A Bunny Hops
text= "a bunny hops"
final = text.split.each{|i| i.capitalize}.join(' ')
puts final
答案 0 :(得分:11)
使用Array#map
执行以下操作:
text.split.map { |i| i.capitalize }.join(' ')
更正和短代码:
text= "a bunny hops"
final = text.split.map(&:capitalize).join(' ')
puts final
# >> A Bunny Hops
为什么没有你的工作:
因为Array#each
方法返回已调用它的接收器本身:
text= "a bunny hops"
text.split.each(&:capitalize) # => ["a", "bunny", "hops"]
但是Array#map
会返回一个新数组
text.split.map(&:capitalize) # => ["A", "Bunny", "Hops"]
我会使用String#gsub
执行以下操作:
text= "a bunny hops"
text.gsub(/[A-Za-z']+/,&:capitalize) # => "A Bunny Hops"
注意:我在这里使用#gsub
的模式并不是一件容易的事。我按照帖子本身给出的字符串做了。您需要根据您将拥有的文本字符串示例进行更改。但上面是用短代码和更多Rubyish方式做这些事情的方法。
答案 1 :(得分:2)
而不是将字符串拆分成数组,然后将它们重新连接在一起,只需使用正则表达式:
text = "a bunny hops"
final = text.gsub(/\b(?<!['’`])[a-z]/) { $&.capitalize }
puts final
完全披露,这是Ruby on Rails titleize
方法的工作原理。 View Source.
答案 2 :(得分:1)
获取现有代码,只需添加!大写旁边:
final = text.split.each{|i| i.capitalize!}.join(' ')
或将'each'替换为'map':
final = text.split.map{|i| i.capitalize}.join(' ')
并且您的目标已经完成:)