¿Cómo puedo verificar si una cadena (NSString
) contiene otra cadena más pequeña?
Esperaba algo como:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Pero lo más cercano que pude encontrar fue:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
De todos modos, ¿es esa la mejor manera de encontrar si una cadena contiene otra cadena?
if ([string rangeOfString:@"hello"] == 0) {...}
hay un error de desajuste de tipo para NSRange e int. para arreglar eso, debes cambiar la línea a la siguiente:if ([string rangeOfString:@"hello"].length == 0) {...}
Respuestas:
La clave es darse cuenta de que
rangeOfString:
devuelve unaNSRange
estructura, y la documentación dice que devuelve la estructura{NSNotFound, 0}
si el "pajar" no contiene la "aguja".Y si está usando iOS 8 u OS X Yosemite, ahora puede hacer: (* NOTA: Esto bloqueará su aplicación si se llama a este código en un dispositivo iOS7).
(Así es como funcionaría en Swift)
👍
fuente
[string rangeOfString:@"bla"].location != NSNotFound
será verdadera cuando cadena esnil
!Para iOS 8.0+ y macOS 10.10+, puede usar el nativo de NSString
containsString:
.Para versiones anteriores de iOS y macOS, puede crear su propia categoría (obsoleta) para NSString:
Nota: Observe el comentario de Daniel Galasko a continuación sobre el nombramiento
fuente
return [self rangeOfString:substring].location != NSNotFound;
y lo incluí en mi biblioteca de refactorización, es_ios_utils. github.com/peterdeweese/es_ios_utilsDado que este parece ser un resultado de alto rango en Google, quiero agregar esto:
iOS 8 y OS X 10.10 agregan el
containsString:
método aNSString
. Una versión actualizada del ejemplo de Dave DeLong para esos sistemas:fuente
// También puedes usar lo siguiente:
fuente
Con iOS 8 y Swift , podemos usar el
localizedCaseInsensitiveContainsString
métodofuente
Personalmente, realmente odio
NSNotFound
pero entiendo su necesidad.Pero algunas personas pueden no entender las complejidades de comparar contra NSNotFound
Por ejemplo, este código:
tiene sus problemas:
1) Obviamente si
otherString = nil
este código fallará. una prueba simple sería:resultados en !! CRASH !!
2) Lo que no es tan obvio para alguien nuevo en el objetivo-c es que el mismo código NO se bloqueará cuando
string = nil
. Por ejemplo, este código:y este código:
ambos resultarán en
Que claramente NO es lo que quieres.
Entonces, la mejor solución que creo que funciona es usar el hecho de que rangeOfString devuelve la longitud de 0, por lo que un código mejor y más confiable es este:
O SIMPLEMENTE:
que para los casos 1 y 2 volverá
Esos son mis 2 centavos ;-)
Consulte mi Gist para obtener más código útil.
fuente
Una versión mejorada de la solución de P i , una categoría en NSString, que no solo dirá, si una cadena se encuentra dentro de otra cadena, sino que también toma un rango por referencia, es:
Úselo como:
fuente
Aquí hay un fragmento de función copiar y pegar:
fuente
Oneliner (menor cantidad de código. SECO, ya que solo tiene uno
NSLog
):fuente
fuente
prueba esto,
fuente
Mejor solución. ¡Tan simple como esto! Si desea encontrar una palabra o parte de la cadena. Puedes usar este código. En este ejemplo vamos a verificar si el valor de la palabra contiene "acter".
fuente
En Swift 4:
fuente
Si necesita esto una vez, escriba:
fuente
En caso de rapidez, esto se puede usar
fuente
Si no te preocupes por la cadena de mayúsculas y minúsculas. Intenta esto una vez.
fuente
Por favor use este código
fuente
Use la opción NSCaseInsensitiveSearch con rangeOfString: opciones:
Se encuentra el resultado de salida: Sí
Las opciones se pueden "or'ed" juntas e incluyen:
NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch y más
fuente
La primera cadena contiene o no la segunda cadena,
fuente
Prueba esto:
Swift 4.1, 4.2:
Para el objetivo-C:
fuente
Swift 4 y superior
C objetivo
fuente
fuente
String
tipo. En segundo lugar, tenemos todos los objetos. Entonces, como argumento, debes pasarNSString
. Voto por la eliminación debido a la mala calidad de una respuesta en una pregunta muy activa.Si se necesita cierta posición de la cadena, este código se coloca en Swift 3.0 :
fuente