【问题标题】:Match NSArray of characters Objective-C匹配字符的 NSArray Objective-C
【发布时间】:2011-07-29 16:17:01
【问题描述】:

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

所以在例子中:

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

函数应该返回 5。

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

【问题讨论】:

    标签: iphone objective-c nsarray character nsrange


    【解决方案1】:
    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】:

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

    【讨论】:

    • 你的意思是使用像 \(#|@|&)\\ 这样的东西作为模式而不是数组?
    • 是的,就是这样的模式。还有@Matt Wilding——编辑的力量意味着我不知道你在说什么:P
    【解决方案3】:

    你也应该看看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-05-28
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多