如何在 Ruby 中最好地删除字符串的最后 n 个字符?

16

在Ruby中,我只想去掉字符串的最后n个字符,但以下方法不起作用

"string"[0,-3]
不确定上下文,无法为

nor

提供准确的翻译。请提供更多上下文或其他需要翻译的内容。
"string".slice(0, -3)

我希望有一种简洁的方法,而不是像下面这样的方法:

"string".chop.chop.chop

这可能很简单,请有经验的人教教我!谢谢!


7
+1 对于 "chop.chop.chop"。这让我想到你像是用斧头砍断了这条绳子的末端。 :-) Translated: +1 对于 "chop.chop.chop"。这让我想到你像是用斧头砍断了这条绳子的末端。 :-) - Donal Fellows
1
chop.chop.chop的缺点是会额外复制三份你的String。如果只是"hello, world",那没关系,但如果是File.read('/some/really/big.file'),就会有问题了。 - James A. Rosen
相反的任务,从字符串中获取最后的 n 个字节/字符/任何内容稍微有些棘手:https://dev59.com/EXI95IYBdhLWcg3wvwoQ - Andrew Grimm
3个回答

27
您可以使用范围。
"string"[0..-4]

你比我快了!你也可以使用切片来完成这个操作:"string".slice(0..-4)。 - sosborn
嗨,谢谢!我刚发现我在 [ ] 或切片的第二个参数上犯了一个错误;它应该是长度而不是结束位置... - Tao
3
注意!在 Ruby 1.8 中,这个方法不会移除最后的字符,而是移除最后的字节! - Jörg W Mittag
此答案应解释参数。 - Tom Carchrae

9
您可以使用带有gsub的正则表达式...
"string".gsub( /.{3}$/, '' )

1
如果你在 `slice` 后面加上 `!`,它将会在不必分配给另一个变量的情况下破坏性地删除最后 n 个字符:
my_string.slice!(my_string.length-3,my_string.length)

相对于:

new = my_string.slice(0..-4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接