Есть ли в Ruby встроенный метод string.startswith («abc»)?


Ответы:


339

Это называется String#start_with?, а не String#startswith: в Ruby имена методов логического вывода заканчиваются на, ?а слова в именах методов разделяются знаком _. Не уверен, куда sпошел, лично я бы предпочел String#starts_with?реальныйString#start_with?


9
Мац сказал, что он предпочитает без s, так как это выглядит как второе лицо единственного числа или третьего лица множественного числа.
Эндрю Гримм

5
Строка # start_with? был введен в ruby ​​1.8.7 и 1.9.0 - для более старых версий вы можете использовать одну из версий регулярного выражения или индекса, упомянутых в других ответах.
Хэмиш Даунер

3
в Rails вы можете использовать String # start_with?
Абдо

3
@anthropomorphic github.com/rails/rails/blob/… ; это псевдоним для String # start_with?
Абдо

10
@AndrewGrimm Единственная проблема в том, что «строка» - это третье лицо единственного числа! (Ergo, 's' не должен был быть отброшен).
user456584

41

Ваше название вопроса и ваше тело вопроса отличаются. Рубин не имеет стартов с? метод. Однако Rails , который является фреймворком Ruby , делает , как утверждает sepp2k. Смотрите его комментарий к его ответу для ссылки на документацию для него.

Вы всегда можете использовать регулярное выражение, хотя:

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

^ означает «начало строки» в регулярных выражениях


Я взял комбинацию «субъект + тело», чтобы обозначить: «У Руби нет метода start_with. Есть рельсы?».
2010 г.

@ sepp2k, но это ?в названии вопроса)
Nakilon

1
Строка имеет start_with? начиная с ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 также имеет start_with? - документация и примечания к выпуску 1.8.7
Хэмиш Даунер

будьте осторожны при построении регулярных выражений из строковых литералов - не забывайте избегать специальных символов. есть функция для того, чтобы строковые литералы могли быть непредсказуемыми
Раду

17

Если это для не-Rails проекта, я бы использовал String#index:

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

9
Это, однако, будет более ресурсоемким, так как start_with?метод может просто подтвердить, что начало строки соответствует заданной строке - таким образом обрабатывать не более n символов, где n - длина данной строки - тогда как indexпридется искать вся базовая строка. В случае сбоя starts_with?потребуется один доступ (на строку) и сравнение, тогда как indexбудет проходить почти полная длина базовой строки.
OldPeculier

5

Вы можете использовать String =~ Regex. Возвращает позицию полного соответствия регулярному выражению в строке.

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

Пожалуйста, используйте //вместо того, чтобы по %rвозможности.
Cyoce
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.