从索引到字符串结尾的子字符串的Ruby成语

Posted

技术标签:

【中文标题】从索引到字符串结尾的子字符串的Ruby成语【英文标题】:Ruby idiom for substring from index until end of string 【发布时间】:2013-01-28 15:46:24 【问题描述】:

只是想知道是否有一个 Ruby 习语用于从索引中提取子字符串直到字符串结尾。我知道str[index..-1],它通过将范围对象传递给String[] 方法来工作,但它有点笨拙。例如,在 python 中,您可以编写 str[index:],它会隐式地获取字符串的其余部分。

例子:

s = "hello world"
s[6..-1] # <-- "world"

还有什么比s[6..-1]更好的吗?

【问题讨论】:

我认为在这种情况下,显式比隐式更好。 @Flauwekeul 为什么 Range 在这方面是个笨蛋? clunk 是什么意思? @Flauwekeul 对不起,我把你和这个问题的主人搞混了。 我认为这很笨拙,因为 -1 索引不是超级直观。 【参考方案1】:

从范围中获取字符串:

s = 'hello world'
s[5..s.length - 1] # world

但是,如果你只想得到最后一句话:

'hello world'.split(' ').last # world

【讨论】:

应该是s[5..s.length - 1]【参考方案2】:

Ruby 2.6 引入了endless ranges,这基本上消除了必须指定结束索引的需要。在你的情况下,你可以这样做:

s = "hello world"
s[6..]

【讨论】:

【参考方案3】:

Rails 的 activesupport 库(可以作为独立于 Rails 的 gem 安装)为字符串添加了 from 方法:

> s = "hello world"
"hello world"
> s.from(6)
"world"

https://api.rubyonrails.org/classes/String.html#method-i-from

【讨论】:

【参考方案4】:

如果您愿意,这里是“更好的”。您可以扩展 ruby​​ String 类,然后在您的代码中使用此方法。例如:

class String
  def last num
    self[-num..-1]
  end
end

然后:

s = "hello world"
p s.last(6)

【讨论】:

OP 没有请求如何获取最后 X 个字符。他们问如何让字符从 X 到字符串的结尾【参考方案5】:

您可以扩展String 类。不确定它是否是 ruby​​ 成语:

class String
  def last(n)
    self[(self.length - n)..-1]
  end
end

【讨论】:

OP 想要从n 开始的最后一个字符。不是最后一个 n 字符。【参考方案6】:

我认为不是。

似乎Range 是更好的方法。

【讨论】:

对不起,你能澄清一下吗?你认为Range(我在问题中的方式)是最好的方式吗?

以上是关于从索引到字符串结尾的子字符串的Ruby成语的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 中查找子字符串匹配的结尾

最长不含有重复字符的子字符串

搜索以可变整数结尾的子字符串

Flutter:尝试使用 jsonDecode - 错误:字符串不是索引错误的 int 类型的子类型

如何检查字符串是不是包含Ruby中的子字符串

字符串的正则表达式,不以指定的子字符串结尾[重复]