8

我必须匹配字符串中n 个特殊字符的出现次数。
我想用所有这些字符(它们是 20+)创建一个数组,并创建一个函数来匹配它们中的每一个。
我只有字符串中特殊字符的总数,所以我可以对它们进行一些数学计算。

所以在示例中:

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

该函数应返回 5。

匹配不在数组中的字符,获取字符串长度并输出原始字符串与没有特殊字符的字符串之间的差异会更容易吗?
这是最好的解决方案吗?

4

3 回答 3

10
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 
于 2011-07-29T16:35:01.383 回答
2

您应该使用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 网站上截取了代码。而且我不是正则表达式大师,所以你必须调整模式。但你明白了要点。

于 2011-07-29T16:21:13.137 回答
1

你还应该看看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
于 2011-07-29T16:36:25.580 回答