Капитализация строк - PullRequest
       0

Капитализация строк

1 голос
/ 20 января 2011

Давайте представим, что у нас есть простая абстрактная форма ввода, цель которой - принять некоторую строку, которая может состоять из любых символов.

string = "mystical characters"

Нам нужно обработать эту строку, указав первый символ в верхнем регистре. Да, это наша главная цель. После этого нам нужно отобразить эту преобразованную строку в каком-то абстрактном шаблоне представления. Итак, вопрос в том, нужно ли нам проверять, правильно ли написан первый символ (прописными буквами), или мы можем написать только это?

theresult = string.capitalize
=> "Mystical characters"

Какой подход лучше: проверить и затем использовать заглавные буквы (если необходимо) или принудительно использовать заглавные буквы?

Ответы [ 6 ]

7 голосов
/ 20 января 2011

Сначала проверьте, нужно ли что-то обрабатывать, потому что String # capitalize не только преобразует первый символ в верхний регистр, но также преобразует все остальные символы в нижний регистр.Итак ..

"First Lastname".capitalize == "First lastname"

Это не может быть желаемым результатом.

4 голосов
/ 20 января 2011

Если я правильно понял, вы все равно собираетесь использовать заглавную строку, так зачем беспокоиться о том, что она уже заглавная?

2 голосов
/ 20 января 2011

На основании ответа Тонтту Я бы посоветовал не слишком беспокоиться, а просто использовать заглавные буквы следующим образом:

new_string = string[0...1].capitalize + string[1..-1]
1 голос
/ 06 февраля 2011

Я столкнулся с проблемой Tonttu, импортируя кучу имен, я пошел с:

  strs = "first lastname".split(" ")
  return_string = ""
  strs.each do |str|
    return_string += "#{str[0].upcase}#{str[1..str.length].downcase} "
  end
  return_string.chop

РЕДАКТИРОВАТЬ : неизбежный рефактор (более года) позже.

  "first lastname".split(" ").map do |str| 
    "#{str[0].upcase}#{str[1..str.length].downcase}"
  end.join(' ')

хотя определенно не легче для чтения, он получает тот же результат, объявляя меньше временных переменных.

0 голосов
/ 20 января 2011

Если у вас нет флага, который нужно установить для заглавных строк, которые вы собираетесь проверять, чем просто заглавные буквы без проверки

Также сама капитализация, вероятно, выполняет некоторую проверку.

0 голосов
/ 20 января 2011

Я думаю, вы могли бы написать что-то вроде:

string.capitalize unless string =~ /^[A-Z].*/

Лично я бы просто сделал

string.capitalize
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...