Answers:
试试这个:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
要么
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
.map(&:capitalize)
或至少指向您在文档中找到它的位置?我找不到任何参考。另外,*' '
第二个代码片段结尾处的处理是什么?
&:method
语法map
是一种在数组中每个项目上调用方法的简洁方法。然后,您可以调用join
将该数组转换为字符串。这* ' '
是调用join的另一种方法。您可以将其视为将数组中的各项相乘以创建一个字符串。
在Rails中:
"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'
不含Rails:
"kirk douglas".split(/ |\_/).map(&:capitalize).join(" ")
#OBJECT IT OUT
def titleize(str)
str.split(/ |\_/).map(&:capitalize).join(" ")
end
#OR MONKEY PATCH IT
class String
def titleize
self.split(/ |\_/).map(&:capitalize).join(" ")
end
end
w / o Rails(将Rails的ActiveSupport加载到#titleize方法的补丁中String
)
require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"
Rails titleize
会将破折号和下划线等内容转换为空格,并可能产生其他意外结果,尤其是@JamesMcMahon指出的区分大小写的情况:
"hEy lOok".titleize #=> "H Ey Lo Ok"
因为它旨在处理骆驼式代码,例如:
"kirkDouglas".titleize #=> "Kirk Douglas"
要处理这种情况,您可以#downcase
在运行#titleize之前先使用字符串清理字符串。当然,如果这样做,您将消除所有驼峰式单词分隔:
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
另一种选择是使用正则表达式和gsub,这需要一个代码块:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
.gsub(/\b\w/, &:capitalize)
保留单词内的预期大写字母,例如“ Jane mcCollins”
查看String#capitalize方法。
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
"hello world".split.each{|i| i.capitalize!}.join(' ')
each
块每次迭代的返回值都将被丢弃。在!
正在修改所产生的字符串split
就地。没有!
,capitalize
将在每次迭代中创建一个新的大写字符串,然后立即将其丢弃。最终结果将是"hello world"
,与原始字符串相同。使用!
,split
会更改'd数组中的每个字符串,因此的结果each
是大写字符串数组。
map
。有趣的黑客。点
split
会默认拆分为空格,因此您可以将其缩短:'one TWO three foUR'.split.map(&:capitalize).join(' ')