Мне нужно сделать первый символ каждого слова заглавными, а остальные - строчными ...
manufacturer.MFA_BRAND.first.upcase
это только установка первой буквы в верхнем регистре, но мне нужно это:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
split
по умолчанию разделится на пробел, поэтому вы можете сделать его еще короче:'one TWO three foUR'.split.map(&:capitalize).join(' ')
.map(&:capitalize)
или хотя бы указать, где в документе вы его нашли? Я не могу найти ссылку на это. Кроме того, как обстоят дела с*' '
концом второго фрагмента кода?&:method
синтаксис вmap
является кратким способом вызова метода для каждого элемента в массиве . Затем вы можете вызватьjoin
этот массив в строку.* ' '
Является альтернативным способом вызова присоединиться . Вы можете думать об этом как о умножении элементов в массиве вместе, чтобы создать строку.В Rails:
без рельсов:
без Rails (загрузите ActiveSupport от rails для исправления метода #titleize
String
)(некоторые) варианты использования строки, обработанные #titleize
#titleize gotchas
Rails
titleize
преобразует такие вещи, как тире и подчеркивание, в пробелы и может давать другие неожиданные результаты, особенно в ситуациях с учетом регистра, как указано @JamesMcMahon:потому что он предназначен для обработки кода на верблюде, например:
Чтобы справиться с этим
#downcase
крайним случаем, вы можете сначала очистить строку перед запуском #titleize. Конечно, если вы сделаете это, вы уничтожите все разделенные верблюдами слова:источник
"hello world".titleize
который должен вывести «Hello World».источник
"One Two Three Fo Ur"
которые отличаются от желаемого выхода в этом случае, но могут быть желательны в других.Другой вариант - использовать регулярные выражения и gsub, которые занимают блок:
источник
.gsub(/\b\w/, &:capitalize)
сохраняет заглавнуюПосмотрите на метод String # с заглавными буквами.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
источник
источник
each
блока отбрасывается.!
Модифицируют струны , произведенныеsplit
на месте. Без!
,capitalize
будет создавать одну новую заглавную строку за итерацию, а затем сразу же отбрасывать ее. Окончательный результат будет таким"hello world"
же, как и исходная строка. С помощью!
каждой строки вsplit
массиве 'd изменяется, и поэтому результатомeach
является массив строк с заглавными буквами.map
. Интересный взлом, хотя. ОчкиЕсли вы пытаетесь использовать первую букву каждого слова в массиве, вы можете просто поместить это:
array_name.map (&: прописные буквы)
источник
Я использовал это для аналогичной проблемы:
Это обрабатывает следующие странные случаи, которые я видел, пробуя предыдущие ответы:
источник