Як я можу отримати перший символ у рядку за допомогою Ruby?
Зрештою, те, що я роблю, - це взяти чиєсь прізвище та просто створити з нього початкове.
Отже, якщо рядок був "Smith", я просто хочу "S".
"Smith".chr #=> "S"
Як я можу отримати перший символ у рядку за допомогою Ruby?
Зрештою, те, що я роблю, - це взяти чиєсь прізвище та просто створити з нього початкове.
Отже, якщо рядок був "Smith", я просто хочу "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]
працює як в рубіні 1,8, так і в рубіні 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
.
після name
. І останнє не є чуттєвим, навіть якщо ви видалите.
, тому що для цього робиться два різні методи - [0]
і chr()
.
'Smith'.first