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


当前回答

如果你可以创建类方法,想要删除字符,试试这个:

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'

其他回答

使用正则表达式:

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

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

Ruby是2。5 +。

从Ruby 2.5开始,您可以使用delete_suffix或delete_suffix!以快速和可读的方式实现这一点。

关于方法的文档在这里。

如果你知道后缀是什么,这是惯用的(我认为,甚至比这里的其他答案更具可读性):

'abc123'.delete_suffix('123')     # => "abc"
'abc123'.delete_suffix!('123')    # => "abc"

它甚至比最上面的答案快得多(爆炸法几乎快了40%)。下面是相同基准测试的结果:

                     user     system      total        real
chomp            0.949823   0.001025   0.950848 (  0.951941)
range            1.874237   0.001472   1.875709 (  1.876820)
delete_suffix    0.721699   0.000945   0.722644 (  0.723410)
delete_suffix!   0.650042   0.000714   0.650756 (  0.651332)

我希望这是有用的-注意,该方法目前不接受正则表达式,所以如果你不知道后缀,它是不可行的。然而,正如公认的答案(更新:在撰写本文时)所述,我认为这可能对一些人有用。

x = "my_test"
last_char = x.split('').last
name = "my text"
x.times do name.chop! end

在控制台:

>name = "Nabucodonosor"
 => "Nabucodonosor" 
> 7.times do name.chop! end
 => 7 
> name
 => "Nabuco" 

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

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

(编辑)

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

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

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