Как я могу получить первый символ в строке с помощью Ruby?
В конечном итоге я просто беру чью-то фамилию и создаю из нее инициалы.
Так что, если строка была «Смит», я просто хочу «S».
"Smith".chr #=> "S"
Как я могу получить первый символ в строке с помощью Ruby?
В конечном итоге я просто беру чью-то фамилию и создаю из нее инициалы.
Так что, если строка была «Смит», я просто хочу «S».
"Smith".chr #=> "S"
Ответы:
Вы можете использовать открытые классы Ruby, чтобы сделать ваш код более читабельным. Например, это:
class String
def initial
self[0,1]
end
end
позволит вам использовать initial
метод для любой строки. Итак, если у вас есть следующие переменные:
last_name = "Smith"
first_name = "John"
Тогда вы можете получить инициалы очень четко и легко:
puts first_name.initial # prints J
puts last_name.initial # prints S
Другой метод, упомянутый здесь, не работает в Ruby 1.8 (не то чтобы вы все равно должны были использовать 1.8! - но когда этот ответ был опубликован, он все еще был довольно распространенным):
puts 'Smith'[0] # prints 83
Конечно, если вы не делаете это на регулярной основе, тогда определение метода может быть излишним, и вы можете просто сделать это напрямую:
puts last_name[0,1]
Если вы используете последнюю версию Ruby (1.9.0 или новее), следующее должно работать:
'Smith'[0] # => 'S'
Если вы используете 1.9.0+ или 1.8.7, должно работать следующее:
'Smith'.chars.first # => 'S'
Если вы используете версию старше 1.8.7, это должно работать:
'Smith'.split(//).first # => 'S'
Обратите внимание , что 'Smith'[0,1]
это не работает на 1.8, это не даст вам первый символ, это даст вам только первый байт .
"Smith"[0]
вернет целое значение символа "S". Обе версии подчиняются "Smith"[0,1] == "S"
.
"Smith"[0,1]
работает на 1.8 (при условии, что ASCII). Не уверен, почему вы так много думаете о запросившем, а также обо всех, кто хотел бы узнать из этого вопроса. Например, Mac OS X поставляется в комплекте с Ruby 1.8, поэтому для этих пользователей установка не требуется.
"Smith"[0..0]
работает как в Ruby 1.8, так и в Ruby 1.9.
Для полноты картины, поскольку Ruby 1.9 String # chr возвращает первый символ строки. Он по-прежнему доступен в версиях 2.0 и 2.1.
"Smith".chr #=> "S"
В МРТ 1.8.7 или выше:
'foobarbaz'.each_char.first
Попробуй это:
>> a = "Smith"
>> a[0]
=> "S"
ИЛИ
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]
вернет целое значение символа "S". Обе версии подчиняются "Smith"[0,1] == "S"
.
"Smith"[0] == ?S
это верно как для Ruby 1.8, так и для 1.9
Из-за раздражающего выбора дизайна в Ruby до 1.9 - some_string[0]
возвращает символьный код первого символа - самый переносимый способ записать это some_string[0,1]
, который говорит ему получить подстроку с индексом 0 длиной в 1 символ.
Вы также можете использовать truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
или для дополнительного форматирования:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
Подойдет любой из этих методов:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.
AFTER name
. И последний вариант бессмысленен, даже если вы удалите его .
, потому что он использует два разных метода для одного [0]
и того же - иchr()
.
'Smith'.first