CoffeeScript 大寫(xiě)單詞首字母

2022-06-29 16:48 更新

大寫(xiě)單詞首字母

問(wèn)題

你想把字符串中每個(gè)單詞的首字母轉(zhuǎn)換為大寫(xiě)形式。

解決方案

使用“拆分-映射-拼接”模式:先把字符串拆分成單詞,然后通過(guò)映射來(lái)大寫(xiě)單詞第一個(gè)字母小寫(xiě)其他字母,最后再將轉(zhuǎn)換后的單詞拼接成字符串。

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

或者使用列表推導(dǎo)(comprehension),也可以實(shí)現(xiàn)同樣的結(jié)果:

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

討論

“拆分-映射-拼接”是一種常用的腳本編寫(xiě)模式,可以追溯到Perl語(yǔ)言。如果能把這個(gè)功能直接通過(guò)“擴(kuò)展類”放到String類里,就更方便了。

需要注意的是,“拆分-映射-拼接”模式存在兩個(gè)問(wèn)題。第一個(gè)問(wèn)題,只有在文本形式統(tǒng)一的情況下才能有效拆分文本。如果來(lái)源字符串中有分隔符包含多個(gè)空白符,就需要考慮怎么過(guò)濾掉多余的空單詞。一種解決方案是使用正則表達(dá)式來(lái)匹配空白符的串,而不是像前面那樣只匹配一個(gè)空格:

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

但這樣做又會(huì)導(dǎo)致第二個(gè)問(wèn)題:在結(jié)果字符串中,原來(lái)的空白符串經(jīng)過(guò)拼接就只剩下一個(gè)空格了。

不過(guò),一般來(lái)說(shuō),這兩個(gè)問(wèn)題還是可以接受的。所以,“拆分-映射-拼接”仍然是一種有效的技術(shù)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)