回答
這取決於你使用Ruby版本。
紅寶石2.4和更高
這只是工作,以來this version紅寶石支持Unicode大小寫映射。
"мария".capitalize #=> Мария
紅寶石2.3和更低
"maria".capitalize #=> "Maria"
"мария".capitalize #=> мария
的問題是,它只是沒有做你想要什麼:它輸出мария
,而不是Мария
。
如果您使用的Rails有一個簡單的解決方法:
"мария".mb_chars.capitalize.to_s # requires ActiveSupport::Multibyte
做這項工作。
否則,您必須安裝unicode寶石和使用它像這樣:
require 'unicode'
Unicode::capitalize("мария") #=> Мария
紅寶石1.8
首先,一定要使用編碼魔術評論:
#!/usr/bin/env ruby
puts "мария".capitalize
給invalid multibyte char (US-ASCII)
,而:
#!/usr/bin/env ruby
#coding: utf-8
puts "мария".capitalize
作品沒有錯誤,也看到紅寶石2.3和更低節真正獲利。
它的工作原理!非常感謝 ! – AntonAL 2010-09-16 09:22:07
登錄只是爲了表決你。好東西。 – 2012-09-23 11:14:22
請注意,顯然''我的API很棒'.capitalize'會產生'我的api很棒',這可能是不受歡迎的行爲。 所以這個答案並沒有真正回答這個問題,因爲他只希望第一個字母變成大寫字母而其他字母不變。 – 2016-07-29 16:18:33
使用capitalize
。從docs:
返回str的副本,第一個字符轉換爲大寫,其餘轉換爲小寫。
"hello".capitalize #=> "Hello"
"HELLO".capitalize #=> "Hello"
"123ABC".capitalize #=> "123abc"
不幸的是,機器不可能適當地提高/縮小/大寫。它需要太多的上下文信息才能讓計算機理解。
這就是爲什麼Ruby的String
類只支持ASCII字符的大小寫,因爲它至少有有點定義良好。
「上下文信息」是什麼意思?
例如,要把握正確i
,你需要知道的文字是語言的英語,例如,只有兩個i
S:資本I
沒有點和小i
以點。但土耳其有四個i
s:首都I
沒有一個點,大寫İ
有一個點,小ı
沒有一個點,小i
有一個點。所以,英文'i'.upcase # => 'I'
和土耳其語'i'.upcase # => 'İ'
。換句話說:由於'i'.upcase
可以返回兩個不同的結果,這取決於語言,顯然不可能在不知道其語言的情況下正確使用一個詞。
但是Ruby不知道語言,它只知道編碼。因此,使用Ruby的內置功能來正確地大寫字符串是不可能的。
它變得更糟:甚至與知道語言,有時不可能適當地做大寫。例如,在德語中,'Maße'.upcase # => 'MASSE'
(Maße是複數Maß含義測量值)。但是,'Masse'.upcase # => 'MASSE'
(意思是質量)。那麼,什麼是'MASSE'.capitalize
?換句話說:正確的大寫需要一個完整的人工智能。
所以,與其有時還會提供錯誤的答案,紅寶石選擇有時給沒有答案可言,這就是爲什麼非ASCII字符簡單地獲得downcase/upcase /資本運作忽略。 (這當然也讀錯誤的結果,但至少它很容易檢查。)
對不起,但你的論證不成立。 Ruby選擇不回答答案並不是真的,Ruby總是給出答案,這往往是錯誤的 - 例如, 「мария」.upcase不應該返回「мария」,這在任何情況下都是不正確的。而關於人工智能需求的偏離根本就沒有意義 - 沒有任何東西可以阻止上升趨勢,比如說'''''''',並且讓調用者決定哪個大寫是相關的在給定的情況下。目前,Ruby處理大寫和小寫之間的轉換處理被破壞了,就是這樣。 – michau 2012-11-11 03:12:16
-1因爲有一個大寫[Eszett](https://en.wikipedia.org/wiki/Capital_%E1%BA%9E)。使用一些非完全形式化的區域不能作爲解決方案的證據,僅適用於AI。 – Mike 2015-08-13 14:41:06
利用字符串的第一個單詞的第一個字母
"kirk douglas".capitalize
#=> "Kirk douglas"
爲每個字的第一個字母
在軌:
"kirk douglas".titleize
=> "Kirk Douglas"
OR
"kirk_douglas".titleize
=> "Kirk Douglas"
在紅寶石:
"kirk douglas".split(/ |\_|\-/).map(&:capitalize).join(" ")
#=> "Kirk Douglas"
外軌,但仍然想要使用titleize方法
require 'active_support/core_ext'
"kirk douglas".titleize #or capitalize
好,只是讓我們知道如何利用只有首字母和讓其他人獨自一人(因爲有時候這就是所期望的)...
['NASA', 'MHz', 'sputnik'].collect do |word|
letters = word.split('')
letters.first.upcase!
letters.join
end
=> ["NASA", "MHz", "Sputnik"]
調用#capitalize會導致["Nasa", "Mhz", "Sputnik"]
謝謝你,我正在尋找的,有用的標題轉換爲'刑事案件' – lux 2017-09-23 11:12:16
您可以使用mb_chars
。這方面umlaute:
class String
# Only capitalize first letter of a string
def capitalize_first
self[0] = self[0].mb_chars.upcase
self
end
end
例子:
"ümlaute".capitalize_first
#=> "Ümlaute"
由於積極支持和5.0.0.beta4您可以同時使用這兩種方法之一的Rails:String#upcase_first
或ActiveSupport::Inflector#upcase_first
。查看這個blog post瞭解更多信息。
- 1. 用紅寶石找到字母數字
- 2. 紅寶石 - 編寫一個猜測字母的程序
- 3. 第一個字母大寫小寫
- 4. Swift大寫字母中每個單詞的第一個字母
- 5. 大寫字母中的第一個字母?
- 6. 大寫字母冒號後跟第一個字母?:Javascript
- 7. EditText的第一個字母大寫字母
- 8. BASH - 讓第一個字母大寫
- 9. 尋找第一個大寫字母
- 10. 用紅寶石計算最大並排字母數量
- 11. 如何在字符串中使用Javascirpt大寫字母的第一個字母
- 12. 的首字母大寫在紅寶石用戶名之前保存
- 13. 使用css更改第一個字母大寫字母和其他小寫字母
- 14. 第一個數組項目的大寫字母,但仍然有小寫字母
- 15. C源代碼將字符串中的第一個字母從小寫字母改爲大寫字母
- 16. 大寫每個大寫單詞的第一個字母
- 17. 用大寫字母
- 18. x86彙編:更改一個大寫字母爲小寫字母
- 19. 大寫字母中的三個字母單詞的第一個和最後一個字母
- 20. 將每個單詞的第一個字母轉換爲大寫字母JS
- 21. 如何將字符串中的給定字母從小寫字母轉換爲大寫字母在紅寶石中
- 22. UiTextField小寫字母的第一個字母
- 23. 當第一個字符是數字時更改爲第一個大寫字母
- 24. 紅寶石字符串編碼連續字母頻率
- 25. 排序紅寶石數組作爲字母數字
- 26. 如何大寫第一個和第三個字母?
- 27. 如何小寫字母轉換爲大寫字母和大寫字母爲小寫字母
- 28. 紅寶石 - 生成所有兩個字母的單詞
- 29. 訪問,如果第一個字母不是大寫字母,則檢測姓氏
- 30. 檢查單詞的第一個字母是否是大寫字母
請注意,有些語言對首字母大寫的字母有不同的看法。在愛爾蘭語中,你做的事情是「我mBaileÁthaCliath」(「都柏林」中的) - 小寫'm',大寫'B'。 (見http://en.wikipedia.org/wiki/Consonant_mutation#Celtic_languages,如果你想知道爲什麼愛爾蘭人會這樣做,爲什麼它是有道理的。) – 2012-02-09 23:19:48
同時請注意#capitalize會減少所有不是' t第一個字母......這並不總是你想要的。 '['space','UFO','NASA']。collect {| w | w.capitalize}#=> ['Space','Ufo','Nasa']' – Huliax 2015-11-09 20:03:25