从字符串中删除最后一个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