CoffeeScript攻略3.6:大寫單詞首字母

CoffeeScript Cookbook發表於2011-11-25

問題

你想把字串中每個單詞的首字母轉換為大寫形式。

方案

使用“拆分-對映-拼接”模式:先把字串拆分成單詞,然後通過對映來大寫單詞第一個字母小寫其他字母,最後再將轉換後的單詞拼接成字串。

("foo bar baz".split(' ').map (word) -> word[0].toUpperCase() + word[1..-1].toLowerCase()).join ' '
# => 'Foo Bar Baz'

或者使用列表推導(comprehension),也可以實現同樣的結果:

(word[0].toUpperCase() + word[1..-1].toLowerCase() for word in "foo   bar   baz".split /\s+/).join ' '
# => 'Foo Bar Baz'

討論

“拆分-對映-拼接”是一種常用的指令碼編寫模式,可以追溯到Perl語言。如果能把這個功能直接通過“擴充套件類”(Extending Classes)放到String類裡,就更方便了。

需要注意的是,“拆分-對映-拼接”模式存在兩個問題。第一個問題,只有在文字形式統一的情況下才能有效拆分文字。如果來源字串中有分隔符包含多個空白符,就需要考慮怎麼過濾掉多餘的空單詞。一種解決方案是使用正規表示式來匹配空白符的串,而不是像前面那樣只匹配一個空格:

("foo    bar    baz".split(/\s+/).map (word) -> word[0].toUpperCase() + word[1..-1].toLowerCase()).join ' '
# => 'Foo Bar Baz'

但這樣做又會導致第二個問題:在結果字串中,原來的空白符串經過拼接就只剩下一個空格了。

不過,一般來說,這兩個(或後一個)問題還是可以接受的。所以,“拆分-對映-拼接”仍然是一種有效的技術。


enter image description here

相關文章