ios objective-c cocoa-touch nsstring

ios - Comparación de mayúsculas y minúsculas NSString



objective-c cocoa-touch (11)

Convertir la respuesta de Jason Coco a Swift para los profundamente perezosos :)

if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame) { // Strings are equal. }

¿Alguien puede indicarme algún recurso sobre la comparación que no distingue entre mayúsculas y minúsculas en el Objetivo C? No parece tener un método equivalente a str1.equalsIgnoreCase(str2)


Prueba este método

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString


Siempre puedes asegurarte de que estén en el mismo caso antes de la comparación:

if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) { // They''re equal }

El principal beneficio es que evita el problema potencial descrito por matm con respecto a la comparación de cadenas nulas. Puede verificar que la cadena no sea nula antes de realizar una de las compare:options: o puede que sea perezosa (como yo) e ignorar el costo adicional de crear una nueva cadena para cada comparación (que es mínimo si lo hace). Haciendo solo una o dos comparaciones).


Solución alternativa para swift:

Para hacer tanto UpperCase:

p.ej:

if ("ABcd".uppercased() == "abcD".uppercased()){ }

o para hacer ambos LowerCase:

p.ej:

if ("ABcd".lowercased() == "abcD".lowercased()){ }


Una alternativa si desea más control que solo la insensibilidad a los casos es:

[someString compare:otherString options:NSCaseInsensitiveSearch];

La búsqueda numérica y la insensibilidad diacrítica son dos opciones útiles.


Una nueva forma de hacer esto. iOS 8

let string: NSString = "Café" let substring: NSString = "É" string.localizedCaseInsensitiveContainsString(substring) // true


para consultar con el prefijo como en el iPhone ContactApp

([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)

this blog me fue útil.


NSString *stringA; NSString *stringB; if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) { // match }

Nota: stringA && es obligatorio porque cuando stringA es nil :

stringA = nil; [stringA caseInsensitiveCompare:stringB] // return 0

y así sucede que NSOrderedSame también se define como 0 .

El siguiente ejemplo es un error típico:

NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"]; if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) { // what happens if "Rank" is not found in standardUserDefaults }


- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString


NSMutableArray *arrSearchData; NSArray *data=[arrNearByData objectAtIndex:i]; NSString *strValue=[NSString stringWithFormat:@"%@", [data valueForKey:@"restName"]]; NSRange r = [strValue rangeOfString:key options:NSCaseInsensitiveSearch]; if(r.location != NSNotFound) { [arrSearchData addObject:data]; }


if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) { // strings are equal except for possibly case }

La documentación se encuentra en Métodos de búsqueda y comparación.