Ruby: как получить первый символ строки - PullRequest
104 голосов
/ 28 апреля 2010

Как я могу получить первый символ в строке, используя Ruby?

В конечном итоге я беру чью-то фамилию и просто создаю из нее инициал.

Так что, если строка "Смит", я просто хочу "S".

Ответы [ 11 ]

119 голосов
/ 28 апреля 2010

Вы можете использовать открытые классы 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] 
96 голосов
/ 28 апреля 2010

Если вы используете последнюю версию 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, он не даст вам первый символ, он даст вам только первый байт .

28 голосов
/ 29 апреля 2010
"Smith"[0..0]

работает как в ruby ​​1.8, так и в ruby ​​1.9.

21 голосов
/ 25 декабря 2013

Для полноты картины, поскольку Ruby 1.9 String # chr возвращает первый символ строки. Его все еще доступно в 2.0 и 2.1.

"Smith".chr    #=> "S"

http://ruby -doc.org / ядро-1.9.3 / String.html # метод-я-CHR

14 голосов
/ 29 апреля 2010

В МРТ 1.8.7 или выше:

'foobarbaz'.each_char.first
11 голосов
/ 22 апреля 2016

в рельсах

name = 'Smith'
name.first 
8 голосов
/ 10 сентября 2014

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

>> a = "Smith"
>> a[0]
=> "S"

OR

>> "Smith".chr
#=> "S"
5 голосов
/ 28 апреля 2010
>> s = 'Smith'                                                          
=> "Smith"                                                              
>> s[0]                                                                 
=> "S"                                                        
2 голосов
/ 28 апреля 2010

Из-за надоедливого выбора дизайна в Ruby до 1.9 - some_string[0] возвращает код символа первого символа - наиболее переносимый способ написать это some_string[0,1], который говорит ему получить подстрока с индексом 0 длиной 1 символ.

0 голосов
/ 29 декабря 2017

Еще один вариант, который еще не был упомянут:

> "Smith".slice(0)
#=> "S"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...