從字符串中刪除最後一個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%。
印章也是一種選擇。對於被刪除的內容不那麼挑剔。 – 2011-11-04 12:04:23
算法上,會不會像[0 ..-#]那樣更快? chomp必須解析一個字符串來尋找匹配。排除和結束字符號碼不。 – Plasmarob 2013-10-04 16:12:16
@Plasmarob,這將是一個很好的基準。 – 2013-10-04 16:19:20
時退房 「切片」 的方法:
請注意,這隻適用於Ruby 1.9。在Ruby 1.8中,這將刪除最後的*字節*,而不是最後的*字符*。 – 2010-11-17 23:21:56
irb> 'now is the time'[0...-4]
=> "now is the "
請注意,這隻適用於Ruby 1.9。在Ruby 1.8中,這將刪除最後的*字節*,而不是最後的*字符*。 – 2010-11-17 23:20:51
但他可能是指*「字節」*,如果他使用1.8.x. – DigitalRoss 2011-08-27 17:29:59
這是行不通的,但我發現'abc123'.chomp('123')對於短和長的字符串來說快兩倍。 (Ruby 2.0.0-p247) 任何人都可以證實這一點嗎? – Plasmarob 2013-10-04 16:59:39
您可以隨時使用類似
"string".sub!(/.{X}$/,'')
哪裏X
是字符數刪除。
或者與分配/使用結果:
myvar = "string"[0..-X]
其中X
是字符加一去除的數量。
x = "my_test"
last_char = x.split('').last
問題是關於從字符串中刪除最後N個字符,而不是找到最後一個字符 – unnitallman 2012-10-20 06:30:32
我建議chop
。我認爲它已經在其中一個評論中提到,但沒有鏈接或解釋,所以這裏就是爲什麼我認爲它更好:
它只是從字符串中刪除最後一個字符,而不必指定任何值發生。
如果您需要刪除多個字符,那麼chomp
是您最好的選擇。這就是ruby docs不得不說的大約chop
:
返回一個新的字符串,刪除最後一個字符。如果字符串 以\ r \ n結尾,則兩個字符都將被刪除。將chop應用於空字符串 會返回空字符串。String#chomp通常是更安全的 替代方案,因爲如果它不以 記錄分隔符結束,它將使字符串保持不變。
雖然這大多采用去除如\r\n
我用它來從一個簡單的字符串中刪除的最後一個字符分隔,例如s
,使字奇異。
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"
注意:最後一個字符串char在n-1。所以,要刪除最後2個,我們使用n-3。
這並不刪除最後兩個字母。它返回它們。 – 2015-04-11 21:59:44
你不需要首先測量字符串,Ruby本身使用字符串末尾的負指數 – 2016-11-25 15:18:42
如果你確定與創建類的方法,想砍掉的字符,試試這個:
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
字符。
積極支持包括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 2017-07-08 19:42:08
@alex:這是Rails的正確答案。 – 2018-02-11 22:04:50
使用正則表達式:
str = 'string'
n = 2 #to remove last n characters
str[/\A.{#{str.size-n}}/] #=> "stri"
- 1. 如何從Ruby字符串中刪除字符串「\ n」?
- 2. 動態刪除最後一個字符串後/從字符串
- 3. 如何刪除perl中字符串的最後n個數字字符
- 4. 從R中的字符串中提取最後n個字符
- 5. 如何從字符串中刪除/刪除最後一個字符php
- 6. 從字符串中刪除「\ n \」
- 7. 刪除字符串的最後n個字符(在Ruby中)的最佳方式是什麼?
- 8. 刪除字符串從後
- 9. 刪除字符串中最後一個空格後的最後一個字符
- 10. 使用PHP從字符串中刪除最後一個數字?
- 11. 修剪字符串,刪除C中的最後一個字符#
- 12. 刪除XSLT字符串中的最後一個字符
- 13. Python中刪除字符串的最後3個字符
- 14. 刪除字符串中的最後一個字符Livecode語言
- 15. Objective C - 刪除字符串中的最後一個字符
- 16. 從字符串末尾刪除n個字符
- 17. 從字符串的開頭刪除n個字符
- 18. Ruby從字符串中刪除空行
- 19. 從字符串中刪除字符串
- 20. 從字符串中刪除字符串
- 21. 刪除OCaml中字符串中最後的'\ n'
- 22. 刪除Java中的字符串中的最後n行(句子)
- 23. Powershell;從每個路徑中刪除字符串中的最後一個'/'字符
- 24. 刪除字符串中的最後一個字符和第一個字符
- 25. 刪除\ XA0,\ n,從Python字符串
- 26. 從字符串中刪除字符「\ n」,讀
- 27. 如何從json字符串中刪除多個換行符(\ n)?
- 28. 屏蔽除最後n個字符以外的字符串的所有字符
- 29. 如何從字符串中刪除第一個和最後一個字符
- 30. Ruby - 刪除字符串中的短字
參見:什麼是最好的方法去除字符串的最後n個字符(在Ruby中)?](http://stackoverflow.com/q/3059803/1591669) – unor 2015-09-25 01:23:16