2014-02-10 35 views
0

我有字符串1. california,我需要閱讀1. California。在我看來,這樣做的正確方法是剝離1.,String#capitalize,並重新添加1.,但我無法弄清楚。如何修剪,大寫和重新添加修剪後的字符?

+2

您可以使用拆分法 – Rinku

+0

這裏的問題是,有與名稱自動做到這一點沒有什麼好辦法。 'capitalize'或'titleize'並不總是夠聰明的:思考如下名字:哥倫比亞特區,里約熱內盧...... – spickermann

回答

3

相反條(其移除前導,尾隨字符),split字符串兩個部分,並且利用所述字部分,則join

num, word = '1. california'.split(nil, 2) # split into two parts. 
# => ["1.", "california"] 
[num, word.capitalize].join(' ') 
# => "1. California" 

num, word = '2. los angeles'.split(nil, 2) # split into two parts. 
# => ["2.", "los angeles"] 
[num, word.capitalize].join(' ') 
# => "2. Los angeles" 

或使用正則表達式(String#sub):

"1. california".sub(/[a-z]/i, &:upcase) 
# => "1. California" 
"2. los angeles".sub(/[a-z]/i, &:upcase) 
# => "2. Los angeles" 

UPDATE

如果你想要capit ALIZE所有單詞:

"2. los angeles".split.map(&:capitalize).join(' ') 
# => "2. Los Angeles" 

"2. los angeles".gsub(/\b[a-z]/i, &:upcase) # gsub with modified regex. 
# => "2. Los Angeles" 
+0

如果你有'2',會發生什麼?洛杉磯? – nodakai

+0

@nodakai,謝謝你指出。我更新了處理該問題的答案。 (指定給'split'調用的'limit'參數) – falsetru

0
"1. california".split(" ").first + " " + "1. california".split(" ").last.capitalize` 
2

可以使用split方法。拆分字符串分爲兩個部分如下

str = '1. california'.split 

然後使用joincapitalize方法,並再次加入他們的行列如下:

[str[0],str[1].capitalize].join(' ') 
1
s = "1. california" 
s.split.map(&:capitalize).join(" ") #=> 1.California 

s2 = "2. los angeles" 
s2.split.map(&:capitalize).join(" ") #=> 2. Los Angeles 
0

這裏是一個正則表達式的版本:

a = '1. california' 
first_letter = /[[:alpha:]]/ 
a[first_letter] = a[first_letter].upcase 
0

你可以從以下的一些想法 1.)

str = "2. los angeles" 

array = [] 

str.split(nil).each{|i| array << i.capitalize} 

array.join(" ") 

==> "2. Los Angeles" 

2)

str = "2. los angeles" 

str.split(nil).collect(&:capitalize).join(" ") 

==> "2. Los Angeles" 
+0

1.9.2p320:045> str =「2. los angeles」 =>「2. los angeles」 1.9.2p320:046> array = [] = > [] 1.9.2p320:047> str.split(nil).each {| i | array << i.capitalize} => [「2.」,「los」,「angeles」] 1.9.2p320:048> array.join(「」) =>「2. Los Angeles」 –

+0

str = 「2. los angeles」 =>「2. los angeles」 1.9.2p320:059> str.split(nil).collect(&:capitalize).join(「」) =>「2. Los Angeles」 1.9.2p320:060> –