Каков предпочтительный способ удаления последних символов n
из строки?Ruby, удалить последние N символов из строки?
ответ
Если символы, которые вы хотите удалить, всегда одни и те же символы, а затем рассмотреть chomp
:
'abc123'.chomp('123') # => "abc"
Преимущества chomp
являются: отсутствие счета и код более четко сообщается, что он делает.
без аргументов, chomp
удаляет DOS или Unix конца строки, если либо присутствует:
"abc\n".chomp # => "abc"
"abc\r\n".chomp # => "abc"
Из комментариев, был вопрос о скорости использования #chomp
по сравнению с использованием ассортимент. Вот тест сравнения два:
require 'benchmark'
S = 'asdfghjkl'
SL = S.length
T = 10_000
A = 1_000.times.map { |n| "#{n}#{S}" }
GC.disable
Benchmark.bmbm do |x|
x.report('chomp') { T.times { A.each { |s| s.chomp(S) } } }
x.report('range') { T.times { A.each { |s| s[0...-SL] } } }
end
Результаты тестов (с использованием CRuby 2.13p242):
Rehearsal -----------------------------------------
chomp 1.540000 0.040000 1.580000 ( 1.587908)
range 1.810000 0.200000 2.010000 ( 2.011846)
-------------------------------- total: 3.590000sec
user system total real
chomp 1.550000 0.070000 1.620000 ( 1.610362)
range 1.970000 0.170000 2.140000 ( 2.146682)
Так грызть быстрее, чем при использовании диапазона, на ~ 22%.
Чоп также является опцией. Это менее суетливо о том, что удаляется. –
алгоритмически, не будет ли что-то вроде [0 ..- #] быть быстрее? chomp должен разбирать строку, которая ищет совпадения. Исключить и завершить номер символа нет. – Plasmarob
@Plasmarob, Это было бы хорошо проверить. –
str = str[0...-n]
Обратите внимание, что это работает только в Ruby 1.9. В Ruby 1.8 это удалит последние * байты *, а не последние * символы *. –
Это лучше, чем выбранный ответ, поскольку 3 точки (...) легче запомнить, поскольку -n означает вывести n символов из конца строки. – lulalala
также «abcd» [0 ..- 2] # => «abc» while «abcd» [0 ...- 2] # => «ab». По моему мнению, вариант с 3-мя точками приводит к более понятному коду. – mokagio
Заканчивать методом "среза":
Обратите внимание, что это работает только в Ruby 1.9. В Ruby 1.8 это удалит последние * байты *, а не последние * символы *. –
irb> 'now is the time'[0...-4]
=> "now is the "
Обратите внимание, что это работает только в Ruby 1.9. В Ruby 1.8 это удалит последние * байты *, а не последние * символы *. –
Но он, вероятно, имел в виду * «байты» *, если он использует 1.8.x. – DigitalRoss
Это действительно работает, но я нахожу 'abc123'.chomp (' 123 ') в два раза быстрее для коротких и очень длинных строк. (Ruby 2.0.0-p247) Может ли кто-нибудь подтвердить это? – Plasmarob
Вы всегда можете использовать что-то вроде
"string".sub!(/.{X}$/,'')
Где X
является количество символов, чтобы удалить.
Или с назначением/с использованием результата:
myvar = "string"[0..-X]
где X
является количество символов плюс один для удаления.
x = "my_test"
last_char = x.split('').last
вопрос был о удалении последних N символов из строки, а не об обнаружении последнего символа – unnitallman
Я предлагаю chop
. Я думаю, что это упоминалось в одном из комментариев, но без ссылок или объяснений, поэтому вот почему я думаю, что это лучше:
Он просто удаляет последний символ из строки, и вам не нужно указывать какие-либо значения для этого бывает.
Если вам нужно удалить более одного символа, то chomp
- ваш лучший выбор. Это то, что ruby docs должно сказать о chop
:
Возвращает новую строку с последним символом удален. Если строка заканчивается на \ r \ n, оба символа удаляются. Применение прерывания к пустой строке возвращает пустую строку.Строка # chomp часто является более безопасной альтернативой , так как она оставляет строку неизменной, если она не заканчивается разделителем записей .
Хотя это в основном используется для удаления сепараторов, таких как \r\n
я использовал его, чтобы удалить последний символ из простой строки, например s
сделать слово единственным числом.
Разве это не просто удалить этот единственный символ? Вопрос о «персонажах» во множественном числе – maetthew
Да, вы правы, но chomp («chars») удалит последние «символы». Мне было непонятно, нужны ли OP специальные символы или только N символов. – kakubei
Забавный, это правильный ответ – Amala
name = "my text"
x.times do name.chop! end
Здесь в консоли:
>name = "Nabucodonosor"
=> "Nabucodonosor"
> 7.times do name.chop! end
=> 7
> name
=> "Nabuco"
если вы используете рельсы, попробуйте:
"my_string".last(2) # => "ng"
[Изменено]
Чтобы получить строку без последних 2-х символов :
n = "my_string".size
"my_string"[0..n-3] # => "my_stri"
Примечание: последний символ строки находится в n-1. Итак, чтобы удалить последние 2, мы используем n-3.
Это не удаляет последние две буквы. Он возвращает их. –
Вам не нужно сначала измерять строку, ruby использует отрицательные индексы с конца строки изначально –
Если вы нормально с созданием методов класса и хотите символы отрубить, попробуйте следующее:
class String
def chop_multiple(amount)
amount.times.inject([self, '']){ |(s, r)| [s.chop, r.prepend(s[-1])] }
end
end
hello, world = "hello world".chop_multiple 5
hello #=> 'hello '
world #=> 'world'
капают последние n
символы так же, как сохранение первых length - n
символов.
Active Support включает String#first
и String#last
методы, которые обеспечивают удобный способ сохранить или падение первые/последние n
символы:
require 'active_support/core_ext/string/access'
"foobarbaz".first(3) # => "foo"
"foobarbaz".first(-3) # => "foobar"
"foobarbaz".last(3) # => "baz"
"foobarbaz".last(-3) # => "barbaz"
Это правильный ответ. – alex
@alex: Это правильный ответ для Rails. –
Использование регулярных выражений:
str = 'string'
n = 2 #to remove last n characters
str[/\A.{#{str.size-n}}/] #=> "stri"
- 1. Как удалить последние n символов из строки?
- 2. Каков наилучший способ удалить последние n символов строки (в Ruby)?
- 3. C Удалить последние n символов из файла
- 4. Как удалить последние n символов из строки в Bash?
- 5. Rails, выберите последние n символов из строки?
- 6. Удалить n символов из начала строки
- 7. F #: удалить первые N символов из строки?
- 8. Как удалить строку «\ n» из строки Ruby?
- 9. удалить последние N строк из файла bash
- 10. Удалить «\ n \» из строки
- 11. Удалить последние 8 символов из строки в JQuery
- 12. удалить последние 5 символов из строки с помощью memset
- 13. Powershellv2 - удалить последние символы x из строки
- 14. Удалить последние N байтов из файла
- 15. Удалить последние «\ n» из текстового поля
- 16. удалить последние n букв из в javascript
- 17. Получение n символов из строки
- 18. Удалить n символов с конца строки
- 19. Удалить последние пунктуации быстрой строки
- 20. Удалить последовательность символов из строки
- 21. Последние n слов из строки в bash
- 22. Удалить последние N элементов списка
- 23. Ruby: удалить из строки
- 24. Удалить последние повторяющиеся символы из строки
- 25. Как удалить n символов из строки с помощью regex
- 26. Как удалить первые n символов из строки в c?
- 27. удалить последние 10 символов файла
- 28. Удалить \ n из строки python
- 29. Как удалить \ n из строки?
- 30. PHP preg_replace последние N символов, если не буквенно-цифровые
Смотрите также: [что такое лучший способ удалить последние n символов строки (в Ruby)?] (http://stackoverflow.com/q/3059803/1591669) – unor