从字符串中删除最后n个字符的首选方法是什么?


当前回答

我建议你切。我认为其中一条评论中提到了它,但没有链接或解释,所以我认为它更好的原因如下:

它只是从字符串中删除最后一个字符,您不必为此指定任何值。

如果你需要删除一个以上的字符,那么chomp是你最好的选择。这是ruby文档对chop的看法:

返回一个删除了最后一个字符的新字符串。如果字符串 以\r\n结尾,两个字符都被删除。应用chop到空 String返回空字符串。String#chomp通常更安全 可选项,因为如果字符串不以。结尾,则保持字符串不变 记录分隔符。

虽然这主要用于删除分隔符,如\r\n,但我已经使用它来删除一个简单字符串的最后一个字符,例如s使单词成为单数。

其他回答

我建议你切。我认为其中一条评论中提到了它,但没有链接或解释,所以我认为它更好的原因如下:

它只是从字符串中删除最后一个字符,您不必为此指定任何值。

如果你需要删除一个以上的字符,那么chomp是你最好的选择。这是ruby文档对chop的看法:

返回一个删除了最后一个字符的新字符串。如果字符串 以\r\n结尾,两个字符都被删除。应用chop到空 String返回空字符串。String#chomp通常更安全 可选项,因为如果字符串不以。结尾,则保持字符串不变 记录分隔符。

虽然这主要用于删除分隔符,如\r\n,但我已经使用它来删除一个简单字符串的最后一个字符,例如s使单词成为单数。

使用正则表达式:

str = 'string'
n = 2  #to remove last n characters

str[/\A.{#{str.size-n}}/] #=> "stri"

删除最后n个字符与保留第一个长度- 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"
x = "my_test"
last_char = x.split('').last

如果您正在使用rails,请尝试:

"my_string".last(2) # => "ng"

(编辑)

获取没有最后2个字符的字符串:

n = "my_string".size
"my_string"[0..n-3] # => "my_stri"

注意:最后一个字符串字符是n-1。为了去掉最后2,我们用n-3。