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