¿Ruby tiene un método integrado string.startswith ("abc")?

Respuestas:

339

Se llama String#start_with?, no String#startswith: en Ruby, los nombres de los métodos booleanos terminan con ?y las palabras en los nombres de los métodos se separan con un _. No estoy seguro de dónde sfue, personalmente, preferiría String#starts_with?a lo realString#start_with?

Jörg W Mittag
fuente
9
Matz ha dicho que prefiere sin la s, ya que parece una segunda persona del singular o una tercera persona del plural.
Andrew Grimm
55
Cadena # start_with? se introdujo en ruby ​​1.8.7 y 1.9.0; para versiones anteriores, es posible que desee utilizar una de las versiones de expresiones regulares o de índice mencionadas en otras respuestas.
Hamish Downer
3
en Rails, puedes usar String # begin_with?
Abdo
3
@anthropomorphic github.com/rails/rails/blob/… ; es un alias para String # start_with?
Abdo
10
@AndrewGrimm ¡El único problema es que "una cadena" es tercera persona del singular! (Ergo, 's' no debería haberse dejado caer).
user456584
41

El título de su pregunta y su cuerpo de preguntas son diferentes. Ruby no tiene un start_with? método. Rails , que es un marco de Ruby , sin embargo, lo hace , como sepp2k afirma. Vea su comentario sobre su respuesta para el enlace a la documentación correspondiente.

Sin embargo, siempre puedes usar una expresión regular:

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

^ significa "inicio de cadena" en expresiones regulares

Alex
fuente
Tomé la combinación sujeto + cuerpos para significar "Ruby no tiene un método start_with. ¿Tiene rieles?".
sepp2k
@ sepp2k, pero está ?en el título de la pregunta)
Nakilon
1
¿La cadena tiene start_with? desde ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag
44
@steenslag - ruby ​​1.8.7 también tiene start_with? - documentación y notas de la versión 1.8.7
Hamish Downer
cuidado al construir expresiones regulares a partir de literales de cadena: recuerde escapar de cualquier carácter especial. hay una función para eso fi los literales de cadenas pueden ser impredecibles
Radu Simionescu
17

Si esto es para un proyecto que no es de Rails, usaría String#index:

"foobar".index("foo") == 0  # => true
Lars Haugseth
fuente
9
Sin embargo, esto requeriría un mayor rendimiento, ya que un start_with?método puede simplemente confirmar que el comienzo de la cadena coincide con la cadena dada, procesando así a lo sumo n caracteres donde n es la longitud de la cadena dada, mientras indexque tendrá que buscar toda la cadena base. En un caso de falla, starts_with?tomará un acceso (por cadena) y una comparación, mientras indexque caminará casi toda la longitud de la cadena base.
OldPeculier
5

Puedes usar String =~ Regex. Devuelve la posición de coincidencia de expresiones regulares completas en la cadena.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false
Nakilon
fuente
Úselo en //lugar de %rsiempre que sea posible.
Cyoce