objective-c string nsstring

objective c - Detectando si un NSString contiene...?



objective-c (7)

¿Cómo puedo detectar si una cadena contiene una palabra determinada? Por ejemplo, tengo una cadena debajo que dice:

@"Here is my string."

Me gustaría saber si puedo detectar una palabra en la cadena, como "es", por ejemplo.


Así es como lo haría:

NSString *someString = @"Here is my string"; NSRange isRange = [someString rangeOfString:@"is " options:NSCaseInsensitiveSearch]; if(isRange.location == 0) { //found it... } else { NSRange isSpacedRange = [someString rangeOfString:@" is " options:NSCaseInsensitiveSearch]; if(isSpacedRange.location != NSNotFound) { //found it... } }

Puede agregarlo fácilmente como una categoría en NSString :

@interface NSString (JRStringAdditions) - (BOOL)containsString:(NSString *)string; - (BOOL)containsString:(NSString *)string options:(NSStringCompareOptions)options; @end @implementation NSString (JRStringAdditions) - (BOOL)containsString:(NSString *)string options:(NSStringCompareOptions)options { NSRange rng = [self rangeOfString:string options:options]; return rng.location != NSNotFound; } - (BOOL)containsString:(NSString *)string { return [self containsString:string options:0]; } @end


Con iOS 8 y Swift, podemos usar el método localizedCaseInsensitiveContainsString

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



Espero que esto te ayude, ... agrega esta línea en el archivo .m o crea una clase separada e integra este código.

@implementation NSString (Contains) - (BOOL) containsString: (NSString*) substring { NSRange range = [self rangeOfString : substring]; BOOL found = ( range.location != NSNotFound ); return found; } @end


Recomiendo usar NSLinguisticTagger . Podemos usarlo para buscar Here is my string. His isn''t a mississippi isthmus. It is? Here is my string. His isn''t a mississippi isthmus. It is?

NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[ NSLinguisticTagSchemeTokenType, ] options: NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitOther ]; [linguisticTagger setString:@"Here is my string. His isn''t a mississippi isthmus. It is?"]; [linguisticTagger enumerateTagsInRange:NSMakeRange(0, [[linguisticTagger string] length]) scheme:NSLinguisticTagSchemeTokenType options: NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitOther | NSLinguisticTaggerJoinNames usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSLog(@"tag: %@, tokenRange: %@, sentenceRange: %@, token: %@", tag, NSStringFromRange(tokenRange), NSStringFromRange(sentenceRange), [[linguisticTagger string] substringWithRange:tokenRange]); }];

Esto produce:

tag: Word, tokenRange: {0, 4}, sentenceRange: {0, 19}, token: Here tag: Word, tokenRange: {5, 2}, sentenceRange: {0, 19}, token: is tag: Word, tokenRange: {8, 2}, sentenceRange: {0, 19}, token: my tag: Word, tokenRange: {11, 6}, sentenceRange: {0, 19}, token: string tag: Word, tokenRange: {19, 3}, sentenceRange: {19, 33}, token: His tag: Word, tokenRange: {23, 2}, sentenceRange: {19, 33}, token: is tag: Word, tokenRange: {25, 3}, sentenceRange: {19, 33}, token: n''t tag: Word, tokenRange: {29, 1}, sentenceRange: {19, 33}, token: a tag: Word, tokenRange: {31, 11}, sentenceRange: {19, 33}, token: mississippi tag: Word, tokenRange: {43, 7}, sentenceRange: {19, 33}, token: isthmus tag: Word, tokenRange: {52, 2}, sentenceRange: {52, 6}, token: It tag: Word, tokenRange: {55, 2}, sentenceRange: {52, 6}, token: is

Ignora His mississippi e isthmus e incluso se identifica dentro de isn''t .


Una solución completa primero escanearía la cadena (sin espacios en blanco), luego verificará si el carácter inmediatamente anterior está en blanco o al principio de la línea. Del mismo modo, compruebe si el siguiente personaje está en blanco o al final de la línea. Si ambas pruebas pasan, entonces tienes una coincidencia. Dependiendo de sus necesidades, también puede verificar por,, . , () , etc.

Un enfoque alternativo, por supuesto, es analizar la cadena en palabras y verificar cada palabra individualmente.


Use el siguiente código para escanear la palabra en oracion.

NSString *sentence = @"The quick brown fox"; NSString *word = @"quack"; if ([sentence rangeOfString:word].location != NSNotFound) { NSLog(@"Yes it does contain that word"); }