Использовать для своей выгоды только первый символ строки и оставить других в покое? (Направляющие)

Я пытаюсь заставить направляющие использовать для своей выгоды первый символ строки и оставлять все другими способ, которым они. Я сталкиваюсь с проблемой, где "я из Нью-Йорка", превращен, "я из Нью-Йорка".

Какой метод я использовал бы для выбора первого символа?

Спасибо

Править: Я пытался реализовать, какие предложенные macek, но я получаю "неопределенный метод, 'используют для своей выгоды'" ошибку. Код хорошо работает без использовать для своей выгоды строки. Спасибо за справку!

def fixlistname!
  self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
  self.title[0] = self.title[0].capitalize
  errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end

РЕДАКТИРОВАНИЕ 2: Получил его работа. Спасибо за справку!

РЕДАКТИРОВАНИЕ 3: Ожидайте, нет я не сделал... Вот то, что я имею в своей модели списка.

def fixlistname!
  self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
  self.title.slice(0,1).capitalize + self.title.slice(1..-1)
  errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with?  'You know you'
end

РЕДАКТИРОВАНИЕ 4: редактирование Испытанного macek и все еще получение неопределенного метода 'используют для своей выгоды'" ошибку. Что я мог делать неправильно?

def fixlistname!
  self.title = title.lstrip
  self.title += '...' unless title.ends_with?('...')
  self.title[0] = title[0].capitalize
  errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end

РЕДАКТИРОВАНИЕ 5: Это странно. Я могу избавиться от ошибки неопределенного метода при помощи строки ниже. Проблема состоит в том, что это, кажется, заменяет первую букву числом. Например, вместо того, чтобы использовать для своей выгоды y в Вас, это превращает y в 121

self.title[0] = title[0].to_s.capitalize
101
задан Daniel O'Connor 15 April 2010 в 17:39
поделиться

3 ответа

Заголовок будет писать каждое слово с заглавной буквы. Эта строка кажется объемной, но гарантирует, что единственная измененная буква - первая.

new_string = string.slice(0,1).capitalize + string.slice(1..-1)

Обновление:

irb(main):001:0> string = "i'm from New York..."
=> "i'm from New York..."
irb(main):002:0> new_string = string.slice(0,1).capitalize + string.slice(1..-1)
=> "I'm from New York..."
91
ответ дан 24 November 2019 в 04:34
поделиться

Редактировать 2

Кажется, я не могу воспроизвести вашу проблему. Продолжайте и запустите этот собственный сценарий Ruby. Он генерирует точный результат, который вы ищете, и Rails поддерживает все эти методы. С какими входами у вас проблемы?

#!/usr/bin/ruby
def fixlistname(title)
  title = title.lstrip
  title += '...' unless title =~ /\.{3}$/
  title[0] = title[0].capitalize
  raise 'Title must start with "You know you..."' unless title =~ /^You know you/
  title
end

DATA.each do |title|
  puts fixlistname(title)
end

__END__
you know you something WITH dots ...
you know you something WITHOUT the dots
  you know you something with LEADING whitespace...
  you know you something with whitespace BUT NO DOTS
this generates error because it doesn't start with you know you

output

You know you something WITH dots ...
You know you something WITHOUT the dots...
You know you something with LEADING whitespace...
You know you something with whitespace BUT NO DOTS...
RuntimeError: Title must start with "You know you..."

Edit

На основе вашего редактирования вы можете попробовать что-то вроде этого.

def fixlistname!
  self.title = title.lstrip
  self.title += '...' unless title.ends_with?('...')
  self.title[0] = title[0].capitalize
  errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end

Оригинал

Это поможет.

s = "i'm from New York"
s[0] = s[0].capitalize
#=> I'm from New York

При попытке использовать String # capitalize для всей строки вы видели Я из Нью-Йорка , потому что method:

Возвращает копию str с первым символом, преобразованным в верхний регистр, а остаток в нижний регистр.

"hello".capitalize    #=> "Hello"
"HELLO".capitalize    #=> "Hello"
"123ABC".capitalize   #=> "123abc"
6
ответ дан 24 November 2019 в 04:34
поделиться
string = "i'm from New York"
string.split(/\s+/).each{ |word,i| word.capitalize! unless i > 0 }.join(' ')
# => I'm from New York
-3
ответ дан 24 November 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: