O Ruby possui um método string.startswith ("abc") incorporado?


Respostas:


339

É chamado String#start_with?, não String#startswith: no Ruby, os nomes dos métodos boolean-ish terminam com ?e as palavras nos nomes dos métodos são separadas por um _. Não sei para onde sfoi, pessoalmente, eu preferiria String#starts_with?o realString#start_with?


9
Matz disse que prefere sem os s, pois parece segunda pessoa singular ou terceira pessoa plural.
Andrew Grimm

5
String # start_with? foi introduzido no ruby ​​1.8.7 e 1.9.0 - para versões mais antigas, convém usar uma das versões regex ou index mencionadas em outras respostas.
Hamish Downer

3
no Rails, você pode usar a string # begin_with?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/… ; é um alias para String # start_with?
Abdo

10
@AndrewGrimm O único problema é que "uma string" é uma terceira pessoa do singular! (Ergo, 's' não deveria ter sido descartado).
user456584

41

O título da pergunta e o corpo da pergunta são diferentes. Ruby não tem um start_with? método. O Rails , que é uma estrutura Ruby , no entanto, faz , como afirma o sepp2k. Veja o comentário dele na resposta para o link da documentação.

Você sempre pode usar uma expressão regular:

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

^ significa "início da string" em expressões regulares


Peguei a combinação subject + bods para significar "Ruby não tem um método begin_with. Será que os trilhos?".
sepp2k

@ sepp2k, mas é ?no título da pergunta)
Nakilon

1
String tem start_with? desde rubi 1,9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 também tem start_with? - documentação e notas de versão 1.8.7
Hamish Downer

cuidado ao criar expressões regulares a partir de literais de string - lembre-se de escapar de caracteres especiais. existe uma função para esse fi os literais cordas pode ser imprevisível
Radu Simionescu

17

Se isso for para um projeto não-Rails, eu usaria String#index:

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

9
No entanto, isso seria mais intensivo em desempenho, pois um start_with?método pode simplesmente confirmar que o início da string corresponde à determinada string - processando assim no máximo n caracteres onde n é o comprimento da string especificada - ao passo indexque terá que procurar toda a cadeia de base. Em um caso de falha, starts_with?terá um acesso (por sequência) e comparação, enquanto indexpercorrerá quase todo o comprimento da sequência base.
OldPeculier

5

Você pode usar String =~ Regex. Retorna a posição da correspondência completa de regex na string.

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

Por favor, use em //vez de %rsempre que possível.
Cyoce
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.