Ruby是否有内置方法string.startswith(“ abc”)?


Answers:


339

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


9
Matz表示他更喜欢不使用s,因为这样看起来像第二人称单数或第三人称复数。
安德鲁·格林

5
String#start_with?是在ruby 1.8.7和1.9.0中引入的-对于较旧的版本,您可能希望使用其他答案中提到的正则表达式或索引版本之一。
Hamish Downer

3
在Rails中,可以使用String#starts_with?
Abdo 2013年

3
@ anthropomorphicgithub.com / rails/ rails/blob/…;这是String#start_with的别名吗?
Abdo 2013年

10
@AndrewGrimm唯一的问题是“字符串”是第三人称单数!(Ergo,不应删除's')。
user456584 2014年

41

您的问题标题和问题正文不同。Ruby没有starts_with吗?方法。Rails的,这是一个Ruby 框架,但是,的确,作为sepp2k状态。有关其文档链接的信息,请参见他对答案的评论。

不过,您始终可以使用正则表达式:

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

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


我将subject + bods组合表示为“ Ruby没有start_with方法。有轨吗?”。
sepp2k 2010年

@ sepp2k,但?标题有疑问)
Nakilon 2010年

字符串有start_with?因为红宝石1.9(eigenclass.org/hiki/Changes+in+Ruby+1.9#l124
steenslag

4
@steenslag-ruby 1.8.7也有start_with吗?- 文档1.8.7发行说明
Hamish Downer

从字符串文字中构建正则表达式时要小心-记住转义任何特殊字符。有一个函数可以使字符串文字变幻莫测
Radu Simionescu

17

如果这是用于非Rails项目,则使用String#index

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

9
但是,这将占用更多的性能,因为start_with?方法可以简单地确认字符串的开头与给定的字符串匹配(因此最多处理n个字符,其中n是给定字符串的长度),而index必须进行搜索整个基本字符串。在失败的情况下,starts_with?将进行一次访问(每个字符串)并进行比较,而index将遍历基本字符串的整个长度。
OldPeculier 2014年

5

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

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

请尽量使用//而不是%r
Cyoce
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.