¿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?


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


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

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

Úselo en //lugar de %rsiempre que sea posible.
— Cyoce
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.