Ruby - простой способ конвертировать первую букву строки в нижний регистр - PullRequest
4 голосов
/ 28 июля 2011

Есть ли простой способ преобразовать первую букву строки в нижний регистр? String#capitalize изменяет всю строку. Конечно, я могу удалить первую букву, поставить ее в нижнем регистре и затем добавить в начале. Но это кажется глупым, есть ли более простой способ?

Примечание: я буду иметь дело только с английскими словами.

Редактировать: str[0] = str[0].downcase не работает в JRuby 1.6: (

Редактировать 2: В конце концов я остановился на этом:

word = "ABC"
first_capital_letter = word.match(/^([A-Z])/).to_s
 if(first_capital_letter)
   word = word.sub(first_capital_letter, first_capital_letter.downcase)
   puts word
end

Ответы [ 5 ]

6 голосов
/ 28 июля 2011

Если вы действительно не хотите сокращать первую букву и добавлять ее заново, вы можете сделать str.gsub(/^\w{1}/) { |m| m.downcase }, но это кажется глупым.

5 голосов
/ 28 июля 2011

Попробуйте это:

str[0] = str[0].chr.downcase

Ruby 1.8.7 возвращает integer вместо string для str[0]:

str = "ABC"
print str[0]        # 65
print str[0..0]     # a
print str[0].chr    # a
5 голосов
/ 28 июля 2011
irb(main):001:0> str = "ABC"
=> "ABC"
irb(main):002:0> str[0] = str[0].downcase
=> "a"
irb(main):003:0> str
=> "aBC"
2 голосов
/ 28 июля 2011

Для совместимости в режимах Ruby 1.8 и Ruby 1.9 вы можете использовать:

str[0..0] = str[0..0].downcase
0 голосов
/ 18 августа 2017

Это будет работать:

str.sub(/^\w/) {$&.downcase}

Объяснение: Здесь sub заменяет первое совпавшее выражение один раз вместо использования gsub, который заменяет все совпавшие вхождения. Регулярное выражение ^\w выбирает первый буквенно-цифровой символ из всей строки и передает его в блок. $& захватывает совпавшую строку, а downcase преобразует строку в нижний регистр.

Пример:

2.3.0 :001 > str = 'Regular expressions in Ruby'
=> "Regular expressions in Ruby" 
2.3.0 :002 > str.sub(/^\w/) {$&.downcase}
=> "regular expressions in Ruby"
...