Соответствие NSArray символов Objective-C - PullRequest
8 голосов
/ 29 июля 2011

Я должен соответствовать количеству появлений n специальных символов в строке.
Я подумал создать массив со всеми этими символами (их более 20) и создать функцию, соответствующую каждому из них.
У меня просто есть общее количество специальных символов в строке, поэтому я могу рассчитывать на них.

Итак, в примере:

NSString *myString = @"My string #full# of speci@l ch@rs & symbols";
NSArray *myArray = [NSArray arrayWithObjects:@"#",@"@",@"&",nil];

Функция должна вернуть 5.

Было бы проще сопоставить символы, которых нет в массиве, взять длину строки и вывести разницу между исходной строкой и строкой без специальных символов?
Это лучшее решение?

Ответы [ 3 ]

10 голосов
/ 29 июля 2011
NSString *myString = @"My string #full# of speci@l ch@rs & symbols";

  //even in first continuous special letters it contains -it will return 8

//NSString *myString = @"#&#My string #full# of speci@l ch@rs & symbols";



NSArray *arr=[myString componentsSeparatedByCharactersInSet:[NSMutableCharacterSet characterSetWithCharactersInString:@"#@&"]];

NSLog(@"resulted string : %@ \n\n",arr);

NSLog(@"count of special characters : %i \n\n",[arr count]-1);

ВЫВОД:

приведенная строка: (

"My string ",

full,

" of speci",

"l ch",

"rs ",

" symbols"

)

count of special characters : 5 
2 голосов
/ 29 июля 2011

Вы должны использовать NSRegularExpression , идеально подходящее для вашего сценария. Вы можете создать такой как:

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|&)" options:NSRegularExpressionCaseInsensitive error:&error];

NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];

Предостережение: я скопировал код с сайта Apple Developer. И я не гуру регулярных выражений, поэтому вам придется настроить шаблон. Но вы понимаете суть.

1 голос
/ 29 июля 2011

Вы должны посмотреть также на NSRegularExpression:

- (NSUInteger)numberOfCharacters:(NSArray *)arr inString:(NSString *)str {
    NSMutableString *mutStr = @"(";
    for(i = 0; i < [arr count]; i++) {
        [mutStr appendString:[arr objectAtIndex:i]];
        if(i+1 < [arr count]) [mutStr appendString:@"|"];
    }
    [mutStr appendString:@")"];
    NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:mutStr options:NSRegularExpressionCaseInsensitive error:nil];
    NSUInteger *occur = [regExnumberOfMatchesInString:str options:0 range:NSMakeRange(0, [string length])];
    [mutStr release];
    return occur;
}

Пример использования:

NSString *myString = @"My string #full# of speci@l ch@rs & symbols";
NSArray *myArray = [NSArray arrayWithObjects:@"#",@"@",@"&",nil];
NSLog(@"%d",[self numberOfCharacters:myArray inString:myString]); // will print 5
...