Ruby 是不是有一个 string.startswith("abc") 内置方法?

Posted

技术标签:

【中文标题】Ruby 是不是有一个 string.startswith("abc") 内置方法?【英文标题】:Does Ruby have a string.startswith("abc") built in method?Ruby 是否有一个 string.startswith("abc") 内置方法? 【发布时间】:2011-05-07 00:47:44 【问题描述】:

Ruby 是否有内置的 some_string.starts_with("abc") 方法?

【问题讨论】:

相关问题:***.com/questions/4130364/… 顺便问一下,你问的是 Ruby 还是 Rails? 【参考方案1】:

如果这是针对非 Rails 项目,我会使用 String#index:

"foobar".index("foo") == 0  # => true

【讨论】:

然而,这会更加耗费性能,因为start_with? 方法可以简单地确认字符串的开头与给定的字符串匹配——因此最多处理 n i> 个字符,其中 n 是给定字符串的长度——而index 必须搜索整个基本字符串。在失败的情况下,starts_with? 将进行一次访问(每个字符串)和比较,而index 将遍历基本字符串的几乎全长。【参考方案2】:

它叫做String#start_with?,而不是String#startswith:在Ruby 中,布尔型方法的名称以? 结尾,方法名称中的单词用_ 分隔。不知道s 去了哪里,就个人而言,我更喜欢String#starts_with? 而不是实际的String#start_with?

【讨论】:

Matz 说他更喜欢不带 s,因为它看起来像第二人称单数或第三人称复数。 String#start_with?在 ruby​​ 1.8.7 和 1.9.0 中引入 - 对于旧版本,您可能希望使用其他答案中提到的正则表达式或索引版本之一。 在 Rails 中,你可以使用 String#starts_with? @anthropomorphic github.com/rails/rails/blob/… ;它是 String#start_with 的别名? @AndrewGrimm 唯一的问题是“字符串”是第三人称单数! (因此,'s' 不应该被删除)。【参考方案3】:

您的问题标题和问题正文不同。 Ruby 没有starts_with?方法。 Rails,它是一个 Ruby 框架,但是,确实,如 sepp2k 所述。请参阅他对他的答案的评论以获取其文档的链接。

你总是可以使用正则表达式:

if SomeString.match(/^abc/) 
   # SomeString starts with abc

^ 在正则表达式中表示“字符串的开头”

【讨论】:

我将 subject+bods 组合表示“Ruby 没有 starts_with 方法。有 rails 吗?”。 @sepp2k,但在问题标题中是? 字符串有 start_with 吗?自 ruby​​ 1.9 (eigenclass.org/hiki/Changes+in+Ruby+1.9#l124) @steenslag - ruby​​ 1.8.7 也有 start_with? - documentation 和 1.8.7 release notes 在使用字符串文字构建正则表达式时要小心——记住要转义任何特殊字符。有一个函数,字符串文字可能是不可预测的【参考方案4】:

您可以使用String =~ Regex。它返回字符串中完整正则表达式匹配的位置。

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false

【讨论】:

请尽可能使用// 而不是%r

以上是关于Ruby 是不是有一个 string.startswith("abc") 内置方法?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中是不是有类似于 ruby​​ 的 set_trace_function 的工具?

php 是不是有相当于 python 的 virtualenv 或 ruby​​ 的沙箱?

检查 ruby​​ 类是不是在特定模块中

如何检查一个值是不是存在于Ruby中的数组中

Ruby:检查数组中所有对象的属性是不是相等

ruby 中是不是有适用于 ISO 8601 的综合库/模块?