回答
这取决于你使用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. 用红宝石找到字母数字
- 5. 如何在红宝石中使用大写字母方法
- 6. 红宝石 - 编写一个猜测字母的程序
- 7. 红宝石,解析大写从名称的数组字母
- 8. 第一个字母大写小写
- 9. 仅在Python中使用第一个字母大写字母
- 10. 大写字母的字符串的第一个字母只
- 11. Swift大写字母中每个单词的第一个字母
- 12. 大写字母冒号后跟第一个字母?:Javascript
- 13. Javascript/jQuery大写变音字母的第一个字母
- 14. 大写字母中的第一个字母?
- 15. EditText的第一个字母大写字母
- 16. 寻找第一个大写字母
- 17. BASH - 让第一个字母大写
- 18. XSLT2.0第一个字母大写
- 19. C使第一个字母大写
- 20. 如何匹配的第一个字母是大写/大写字母在PHP?
- 21. 用红宝石计算最大并排字母数量
- 22. 的首字母大写只有大写第一个字的f.label
- 23. 大写第一个字母大写但不改变大写
- 24. 红宝石/正则表达式得到每个单词的第一个字母
- 25. 红宝石中的短命名空间首字母缩写词
- 26. 的首字母大写在红宝石用户名之前保存
- 27. 使用css更改第一个字母大写字母和其他小写字母
- 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