Извлечение последних n символов из строки ruby
Чтобы получить последние n
символы из строки, я предположил, что вы можете использовать
ending = string[-n..-1]
но если длина строки меньше n
длинных букв, вы получите nil
.
Какие способы обхода доступны?
Фон. Строки - это простой ASCII, и у меня есть доступ к ruby 1.9.1, и я использую Plain Old Ruby Objects (без веб-фреймворков).
Ответы
Ответ 1
Здесь у вас есть один вкладыш, вы можете поместить число больше размера строки:
"123".split(//).last(5).to_s
Для ruby 1.9 +
"123".split(//).last(5).join("").to_s
Для ruby 2.0+ объединение возвращает строку
"123".split(//).last(5).join
Ответ 2
Ну, самое легкое обходное решение, о котором я могу думать:
ending = str[-n..-1] || str
(EDIT: оператор or
имеет более низкий приоритет, чем назначение, поэтому используйте ||
вместо этого.)
Ответ 3
В прямом Ruby (без Rails) вы можете сделать
string.chars.last(n).join
Например:
2.4.1 :009 > a = 'abcdefghij'
=> "abcdefghij"
2.4.1 :010 > a.chars.last(5).join
=> "fghij"
2.4.1 :011 > a.chars.last(100).join
=> "abcdefghij"
Если вы используете Ruby on Rails, вы можете вызывать методы first
и last
для строкового объекта. Эти методы предпочтительнее, поскольку они кратки и интуитивно понятны.
Например:
[1] pry(main)> a = 'abcdefg'
=> "abcdefg"
[2] pry(main)> a.first(3)
=> "abc"
[3] pry(main)> a.last(4)
=> "defg"
Ответ 4
ending = string.reverse[0...n].reverse
Ответ 5
Чтобы получить последние n символов из строки, вы можете сделать это
a [-n, n], если a - массив.
Здесь и пример, если вы хотите его.
ruby-1.9.2-p180: 006 > a = "911234567890"
= > "911234567890"
ruby-1.9.2-p180: 009 > a [-5,5]
= > "67890"
ruby-1.9.2-p180: 010 > a [-7,7]
= > "4567890"
Ответ 6
Вы можете использовать следующий код:
string[string.length-n,string.length]
Ответ 7
Вы пробовали регулярное выражение?
string.match(/(.{0,#{n}}$)/)
ending=$1
Регулярное выражение захватывает как можно больше символов в конце строки, но не более n. И хранит его в $1.
Ответ 8
Улучшение ответа EmFi.
string[/.{,#{n}}\z/m]