Alb*_*ini 250
这取决于您使用的Ruby版本.
Ruby 2.4及更高版本
它只是工作,因为此版本 ruby支持Unicode案例映射.
"?????".capitalize #=> ?????
Run Code Online (Sandbox Code Playgroud)
Ruby 2.3及更低版本
"maria".capitalize #=> "Maria"
"?????".capitalize #=> ?????
Run Code Online (Sandbox Code Playgroud)
问题是,它只是没有做你想要的:它输出?????而不是?????.
如果您正在使用Rails,则可以轻松解决此问题:
"?????".mb_chars.capitalize.to_s # requires ActiveSupport::Multibyte
Run Code Online (Sandbox Code Playgroud)
做的工作.
否则,您将必须安装unicode gem并像这样使用它:
require 'unicode'
Unicode::capitalize("?????") #=> ?????
Run Code Online (Sandbox Code Playgroud)
Ruby 1.8
首先,一定要使用编码魔术评论:
#!/usr/bin/env ruby
puts "?????".capitalize
Run Code Online (Sandbox Code Playgroud)
给出invalid multibyte char (US-ASCII),同时:
#!/usr/bin/env ruby
#coding: utf-8
puts "?????".capitalize
Run Code Online (Sandbox Code Playgroud)
工作没有错误,但也看到Ruby 2.3和更低的部分真正的大写.
bou*_*uby 52
大写字母第一个单词的第一个字母
"kirk douglas".capitalize
#=> "Kirk douglas"
Run Code Online (Sandbox Code Playgroud)
大写每个单词的第一个字母
在铁轨中:
"kirk douglas".titleize
=> "Kirk Douglas"
Run Code Online (Sandbox Code Playgroud)
要么
"kirk_douglas".titleize
=> "Kirk Douglas"
Run Code Online (Sandbox Code Playgroud)
在红宝石中:
"kirk douglas".split(/ |\_|\-/).map(&:capitalize).join(" ")
#=> "Kirk Douglas"
Run Code Online (Sandbox Code Playgroud)
在rails之外,但仍想使用titleize方法
require 'active_support/core_ext'
"kirk douglas".titleize #or capitalize
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 18
不幸的是,机器不可能正确地升级/缩小/大写.它需要太多的上下文信息才能让计算机理解.
这就是为什么Ruby的String类只支持ASCII字符的大写,因为它至少有一定的定义.
"上下文信息"是什么意思?
例如,要i正确地进行大写,您需要知道文本所使用的语言.例如,英语只有两个i:大写I没有点,小i点有点.但土耳其有四个i:资本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 /资本运作忽略.(当然这也会读取错误的结果,但至少它很容易检查.)
use*_*240 15
从 Active Support 和 Rails 5.0.0.beta4 开始,您可以使用以下两种方法之一:String#upcase_first或ActiveSupport::Inflector#upcase_first.
"my API is great".upcase_first #=> "My API is great"
"?????".upcase_first #=> "?????"
"?????".upcase_first #=> "?????"
"NASA".upcase_first #=> "NASA"
"MHz".upcase_first #=> "MHz"
"sputnik".upcase_first #=> "Sputnik"
Run Code Online (Sandbox Code Playgroud)
查看“ Rails 5:新的 upcase_first 方法”了解更多信息。
Hul*_*iax 14
好吧,就这样我们知道如何只把第一个字母大写,剩下的就剩下了(因为有时这就是所希望的)......
['NASA', 'MHz', 'sputnik'].collect do |word|
letters = word.split('')
letters.first.upcase!
letters.join
end
=> ["NASA", "MHz", "Sputnik"]
Run Code Online (Sandbox Code Playgroud)
调用#capitalize会导致 ["Nasa", "Mhz", "Sputnik"]
使用capitalize。来自字符串文档:
返回 str 的副本,其中第一个字符转换为大写,其余字符转换为小写。
"hello".capitalize #=> "Hello"
"HELLO".capitalize #=> "Hello"
"123ABC".capitalize #=> "123abc"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124881 次 |
| 最近记录: |