使用Ruby将大写string转换为标题大小写

我试图将Ruby中的全大写string转换为小写字母,但每个单词的第一个字符都是大写字母。 例:

将“我的string在这里”转换为“我的string在这里”。

我知道我可以使用.downcase方法,但这将使一切小写(“我的string在这里”)。 我扫描文件中的所有行,并做这个改变,所以有一个正则expression式,我可以通过ruby来实现这一目标?

谢谢!

当试图拿出我自己的方法(包括下面的参考),我意识到,有一些非常讨厌的angular落案件。 更好的方法是使用已经在Facets中提供的方法,最常见的Ruby库evar:

require 'facets/string/titlecase' class String def titleize split(/(\W)/).map(&:capitalize).join end end require 'test/unit' class TestStringTitlecaseAndTitleize < Test::Unit::TestCase def setup @str = "i just saw \"twilight: new moon\", and man! it's crap." @res = "I Just Saw \"Twilight: New Moon\", And Man! It's Crap." end def test_that_facets_string_titlecase_works assert_equal @res, @str.titlecase end def test_that_my_own_broken_string_titleize_works assert_equal @res, @str.titleize # FAIL end end 

如果你想要更符合典型的写作风格准则的东西(即不会像“和”)这样的词汇,那么在GitHub上有几个“标题”的gem。

如果你使用的是Rails(你所需要的只是ActiveSupport,它是Rails的一部分),你可以使用titleize

 "MY STRING HERE".titleize # => "My String Here" 
 "HELLO WORLD HOW ARE YOU".gsub(/\w+/) do |word| word.capitalize end #=> "Hello World How Are You" 

从ActiveSupport

 "MY STRING HERE".gsub(/\b('?[az])/) { $1.capitalize } 

如果您使用Rails / ActiveSupport,该方法已经可以免费使用。

 string = "MY STRING HERE" string.split(" ").map {|word| word.capitalize}.join(" ") 

它的工作方式: .split(" ")将其分割为空格,现在我们有一个看起来像["my", "string", "here"]的数组。 map调用遍历数组的每个元素,将其分配给临时variablesword ,然后我们称之为capitalize 。 现在我们有一个看起来像["My", "String", "Here"]数组,最后我们通过join每个元素连接到一个空格(“”)来将该数组转换回string。

 "MY STRING HERE".titlecase 

这个工作(这是在Rails的gem方法,但是) http://apidock.com/rails/String/titlecase

我试图改进代码…准备批评和build议。

 class Book attr_accessor :title def title=(new_title) notcap=%w(and the a in of an) str='' new_title.gsub(/(\w|\s)\w+/) do |word| word.strip! if not notcap.include? word word.capitalize! end str += ' ' + word end str.strip! str = str[0].upcase + str[1..-1] @title = str end end 

用于Ruby 2.4.0+的支持Unicode的标题:

 class String def titlecase split(/([[:alpha:]]+)/).map(&:capitalize).join end end 
 >> "я только что посмотрел \"леди исчезает\", и это чума!".titlecase => "Я Только Что Посмотрел \"Леди Исчезает\", И Это Чума!" 

(基于https://stackoverflow.com/a/1792102/788700

利用ruby的一个句子的每个单词的大写,没有正则expression式..因为不幸的是那些吓唬我

 class Book attr_accessor :title def title=(new_title) result = [] words = new_title.split(' ') words.each do |word| capitalized = word[0].upcase + word[1..word.length].downcase result.push(capitalized) end @title = result.join(' ') end end