2008-11-02 22 views

Respuesta

85

Uso -[NSString rangeOfString:]:

- (NSRange)rangeOfString:(NSString *)aString; 

Encuentra y devuelve el rango de la primera ocurrencia de una cadena dada dentro del receptor.

+8

y 'NSRange. location' es el índice real. – devios1

+1

'if (NSRange.location! = NSNotFound)' luego has encontrado una coincidencia. –

18

Escribí una categoría para extender el objeto NSString original. Quizás ustedes puedan referenciarlo. (También puede ver el article en mi blog también.)

ExtendNSString.h:

#import <Foundation/Foundation.h> 

@interface NSString (util) 

- (int) indexOf:(NSString *)text; 

@end 

ExtendNSStriing.m:

#import "ExtendNSString.h" 

@implementation NSString (util) 

- (int) indexOf:(NSString *)text { 
    NSRange range = [self rangeOfString:text]; 
    if (range.length > 0) { 
     return range.location; 
    } else { 
     return -1; 
    } 
} 

@end 
+3

Un mejor uso de NSRange debe ser el siguiente 'código' - (int) indexOf: (NSString *) texto { Rango NSRange = [self rangeOfString: text]; if (range.location! = NSNotFound) { return range.location; } else { return -1; } } 'código' – loretoparisi

+0

Solución agradable, limpia y reutilizable. Y votó -1 a favor de Apple por hacernos tener que escribir funciones de ayudantes tan descaradamente simples en 2014. ¿Por qué no nos pueden hacer la vida más fácil? –

28

Si desea que sólo se sabe cuando una cadena contiene Cadena b uso mi manera de hacer esto.

#define contains(str1, str2) ([str1 rangeOfString: str2 ].location != NSNotFound) 

//using 
NSString a = @"PUC MINAS - BRAZIL"; 

NSString b = @"BRAZIL"; 

if(contains(a,b)){ 
    //TO DO HERE 
} 

Esto es menos legible, pero mejora el rendimiento

+1

Justo lo que necesitaba --- ¡Gracias! –

+0

¡realmente increíble! –