2
我試圖獲得使用紅寶石字符串的第一個字母。以下是我寫的。如何在沒有循環的情況下提取ruby中字符串的第一個字母?
puts "world is a better place".split.collect{|w| w[0].capitalize}.join()
是否有更簡潔的方式來產生相同的結果?
我試圖獲得使用紅寶石字符串的第一個字母。以下是我寫的。如何在沒有循環的情況下提取ruby中字符串的第一個字母?
puts "world is a better place".split.collect{|w| w[0].capitalize}.join()
是否有更簡潔的方式來產生相同的結果?
使用正則表達式:
"world is a better place".scan(/\b[a-z]/i).join
# => "wiabp"
"world is a better place".scan(/\b[a-z]/i).join.upcase
# => "WIABP"
\b
單詞邊界匹配。 (在單詞字符和非單詞字符之間)。 [a-z]
匹配任何字母。
\b[a-z]
匹配單詞的第一個字母表字母。
備註如果有以非字母字符開頭的單詞(?),上面的代碼將不起作用。如果有一個詞包含標點符號,也不起作用。 (例如:World is 1 better-place.
)
UPDATE
使用String#gsub
與捕獲組,你會得到相同的結果:
"world is a better place".gsub(/\s*(\S)\S*/, '\1').upcase
# => "WIABP"
還要注意,好像有,有一個空格或連字符單詞在裏面。 – sawa
@sawa,謝謝你指出。我在說明中加入了這一點。還增加了一個替代方案。 – falsetru