2010-11-09 25 views

回答

288

這就是所謂的String#start_with?,不String#startswith:在Ruby,布爾肥胖型方法的名稱結束與?和在方法名的字被與一個_分離。不知道在哪裏的s去了,就個人而言,我寧願String#starts_with?在實際String#start_with?

+7

Matz說他更喜歡沒有s,因爲它看起來像第二人稱單數或第三人稱複數。 – 2010-11-10 22:58:25

+5

String#start_with?在紅寶石1.8.7和1.9.0中引入 - 對於舊版本,您可能想要使用其他答案中提到的正則表達式或索引版本之一。在Rails中使用 – 2011-09-07 13:25:27

+3

,你可以使用String#starts_with? – Abdo 2013-06-10 15:08:47

36

你的問題標題和你的問題的身體是不同的。 紅寶石沒有starts_with?方法。 導軌,這是一個Ruby 框架,但是,確實,如sepp2k狀態。請參閱他對其文檔鏈接的回答。

你總是可以使用正則表達式,但:

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

^意味着在正則表達式

+0

我將主題+ bods組合表示爲「Ruby沒有starts_with方法,是否有rails?」。 – sepp2k 2010-11-09 04:14:44

+0

@ sepp2k,但問題是'?'標題) – Nakilon 2010-11-09 04:17:17

+0

@ sepp2k瞭解。 :-) – Alex 2010-11-09 04:17:30

5

「字符串的開始」 您可以使用String =~ Regex。它返回字符串中完整正則表達式匹配的位置。

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

請儘可能使用'''而不是'%r'。 – Cyoce 2017-06-20 02:27:44

17

如果這是一個非Rails項目,我會使用String#index

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

然而,這樣做會增加性能,因爲'start_with?'方法可以簡單地確認字符串的開頭與給定的字符串匹配 - 因此最多處理* n *字符,其中* n *是給定字符串的長度,而'index'必須搜索整個基本字符串。在失敗的情況下,'starts_with?'會採用一次訪問(每個字符串)和比較,而'index'幾乎遍歷基本字符串的全部長度。 – OldPeculier 2014-07-28 17:03:11

相關問題