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.