Ruby: Как получить первый символ строки

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

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

Таким образом, если строкой был "Smith", я просто хочу "S".

107
задан SilentGhost 28 April 2010 в 15:27
поделиться

6 ответов

Вы можете использовать открытые классы 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] 
123
ответ дан 24 November 2019 в 03:35
поделиться

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

96
ответ дан 24 November 2019 в 03:35
поделиться
"Smith"[0..0]

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

29
ответ дан 24 November 2019 в 03:35
поделиться

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

2
ответ дан 24 November 2019 в 03:35
поделиться

В MRI 1.8.7 или выше:

'foobarbaz'.each_char.first
14
ответ дан 24 November 2019 в 03:35
поделиться
>> s = 'Smith'                                                          
=> "Smith"                                                              
>> s[0]                                                                 
=> "S"                                                        
5
ответ дан 24 November 2019 в 03:35
поделиться
Другие вопросы по тегам:

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