¿Cuál es la mejor manera de encontrar si una cadena comienza con otra en Ruby (sin rieles)?¿Cómo puedo saber si una cadena comienza con otra cadena en Ruby?
Respuesta
puts 'abcdefg'.start_with?('abc') #=> true
[editar] Esto es algo que no sabía antes de esta pregunta: start_with
toma varios argumentos.
'abcdefg'.start_with?('xyz', 'opq', 'ab')
MRI no lo hace tiene 'start_with?', pero MRI 1.9 lo hace, al igual que Rails. –
@Wayne Conrad: Extrañamente, 1.8.7 * does * tiene la documentación de ['String # start_with?'] (Http://RubyDoc.Info/docs/ruby-core/1.8.7/String#start_with%3F- ejemplo_metodo). –
@ Jörg W Mittag, quizás no extrañamente, estaba equivocado. MRI 1.8.7 sí tiene 'start_with?'. Supongo que lo escribí cuando cargué el IRB para probarlo. –
El método mencionado por steenslag es escueto, y dado el alcance de la pregunta, se debe considerar la respuesta correcta. Sin embargo, también vale la pena saber que esto se puede lograr con una expresión regular, que si no estás familiarizado con Ruby, es una habilidad importante para aprender.
tener un juego con Rubular: http://rubular.com/
Pero en este caso, la siguiente declaración de rubí devolverá true si la cadena de la izquierda comienza con 'abc'. El \ A en el literal de expresión regular a la derecha significa 'el comienzo de la cadena'. Juega con rublos: quedará claro cómo funcionan las cosas.
'abcdefg' =~ /\Aabc/
Como señaló Wayne Conrad, este método también funcionará en una variedad más amplia de tiempos de ejecución que start_with will. – pakeha
me gusta
if ('string'[/^str/]) ...
Debería usar '[/ \ Astr /]' aquí. Su expresión regular también coincide con '" otra \ nstring "'. – haslo
Puesto que hay varios métodos que se presentan aquí, quería averiguar cuál fue el más rápido. El uso de Ruby 1.9.3p362:
irb(main):001:0> require 'benchmark'
=> true
irb(main):002:0> Benchmark.realtime { 1.upto(10000000) { "foobar"[/\Afoo/] }}
=> 12.477248
irb(main):003:0> Benchmark.realtime { 1.upto(10000000) { "foobar" =~ /\Afoo/ }}
=> 9.593959
irb(main):004:0> Benchmark.realtime { 1.upto(10000000) { "foobar"["foo"] }}
=> 9.086909
irb(main):005:0> Benchmark.realtime { 1.upto(10000000) { "foobar".start_with?("foo") }}
=> 6.973697
Así que parece que no está en el más rápido de todos.
Los resultados actualizados con Rubí 2.2.2p95 y una nueva máquina:
require 'benchmark'
Benchmark.bm do |x|
x.report('regex[]') { 10000000.times { "foobar"[/\Afoo/] }}
x.report('regex') { 10000000.times { "foobar" =~ /\Afoo/ }}
x.report('[]') { 10000000.times { "foobar"["foo"] }}
x.report('start_with') { 10000000.times { "foobar".start_with?("foo") }}
end
user system total real
regex[] 4.020000 0.000000 4.020000 ( 4.024469)
regex 3.160000 0.000000 3.160000 ( 3.159543)
[] 2.930000 0.000000 2.930000 ( 2.931889)
start_with 2.010000 0.000000 2.010000 ( 2.008162)
no es sorprendente dado que compilar y probar expresiones regulares es mucho más difícil que simplemente comparar bytes – akostadinov
Cabe señalar que Regex es muy superior para búsquedas que no distinguen entre mayúsculas y minúsculas, incluso si calculó todas las permutaciones de casos para la cadena de prueba con anticipación. –
@PeterP. Acabo de probar búsquedas que no distinguen entre mayúsculas y minúsculas y start_with? aún sale adelante si solo descifra la cadena para buscar y luego compara con la cadena de búsqueda minúscula: '" FooBar ".downcase.start_with? (" foo ")'. – haslo
- 1. Verificar si una cadena comienza con XXXX
- 2. ¿Cómo comprobar si una cadena comienza con una cadena especificada?
- 3. ¿Cómo comprobar si una cadena comienza con otra cadena en C?
- 4. ¿Cómo puedo verificar si existe una cadena en otra cadena?
- 5. ¿Cómo saber que una cadena comienza/termina con una cadena específica en jQuery?
- 6. Compruebe si la cadena "comienza con" otra cadena en ASP clásico.
- 7. Comprobando si la cadena comienza con o termina con otra cadena
- 8. Buscar si la cadena termina con otra cadena en C++
- 9. Verifica si la cadena comienza con algo?
- 10. std :: string comparison (compruebe si la cadena comienza con otra cadena)
- 11. Verificar si una cadena comienza con una letra minúscula
- 12. si la cadena comienza con "xx" (PHP)
- 13. ¿Cómo ver si un NSString comienza con una cierta otra cadena?
- 14. Comprobar si una cadena comienza con un número en PHP
- 15. ¿Cómo saber si una cadena es xml?
- 16. Si algún elemento de la lista comienza con una cadena?
- 17. Compruebe si una cadena comienza con http utilizando Javascript
- 18. jquery compruebe si la cadena comienza con 1234
- 19. ¿Cómo buscar una cadena en otra cadena?
- 20. búsqueda si existe una cadena en otra cadena
- 21. Verificar si la cadena comienza con la pestaña
- 22. verificar, si la cadena comienza con la subcadena dada
- 23. Cómo comprobar si una cadena comienza con una letra mayúscula en una consulta LINQ
- 24. C++ 11 regex: comprobando si la cadena comienza con regex
- 25. KSH compruebe si la cadena comienza con la subcadena
- 26. Actionscript 3: comprueba si la cadena contiene otra cadena
- 27. cómo saber si una cadena es base64 o no
- 28. ¿Cómo puedo escapar de una cadena Unicode con Ruby?
- 29. ¿Cómo puedo ver si existe una subcadena dentro de otra cadena en Java 1.4?
- 30. C# Dividir una cadena por otra cadena
Ver http://stackoverflow.com/questions/4130364/ – Nakilon
estoy usando ruby 1.8.7 1.8.7 –