[objective-c]NSString 查找符号了坠毁

发布时间: 2017/3/27 3:12:02
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

每次我将得到我的服务器作为一个字符串︰

"&abc; 123:342:431:234 & &xyz; 232:2344:433:434 & &pqr; 234:453:534:3445 &"

但有时我会得到

"&pqr; 234:453:534:3445 & &abc; 123:342:431 &xyz; 232:2344:433:434 &"

我想要放弃这些消息 (没有尽头与"&") 前︰ &abc;123:342:431 。我试过,但我不知道我犯错。

这里是我的代码︰

- (BOOL)ashCheckandsemiclonCheck:(NSString *)string {
    if([string rangeOfString:@"&abc"].location != NSNotFound) {
        NSLog(@"is here");
        NSString *pattern = @"&abc[^&]+&";
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                               options:0 error:NULL];

        [regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string length])
                             usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                                 NSRange range = [result range];
                                 matched = [string substringWithRange:range];

                                 NSLog(@"%@", matched);
                             }];
        NSLog(@"filtered Message :%@", matched);
        int times = [[matched componentsSeparatedByString:@"&"] count] - 1;
        NSLog(@"counted times :%i", times);

        if (times == 2) {
            return TRUE;
        } else {
            return FALSE;
        }       
    } else {   
        return FALSE;
    }
}

我想要叫这一论点,如果我有两个 & ,但我的代码中出现错误 NSLog(@"is here"); 。正如我说有时会得到一半的消息。谁能告诉我哪里错了吗?

解决方法 1:

如果我正确地读你的问题,看起来你只需要测试消息字符串是否有效,检查它的开始和结束与 '&'。我会这样做的方法是写成下面这样︰

 NSString* testMessage = @"&bfjhfbgfjhb&";
 NSString* firstCharacter = [testMessage substringToIndex:1];
 NSString* lastCharacter  = [testMessage substringFromIndex:testMessage.length - 1];

 if (([firstCharacter isEqualToString:@"&"]) &&
      [lastCharacter isEqualToString:@"&"]){

    //This is a valid message. Proceed.

 }else{

   //This is not a valid message. Discard.

 }

更新

好吧,基于您的问题编辑/更新,我编辑你的代码 — — 和特别是你的正则表达式模式 — — 要做什么我认为你想要这是要检查的字符串 ' & abc......' 款你消息的开始和结束与 & 字符︰

-(BOOL) ashCheckandsemiclonCheck :(NSString *)string;
{

    if([string rangeOfString:@"&abc"].location !=NSNotFound)
    {
        NSLog(@"is here");

        NSString *pattern = @"&abc[^&\\s]+[^\\s]";

        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                           options:0 error:NULL];
        NSString* __block matched;
        [regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string length])
                         usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                             NSRange range = [result range];
                             matched = [string substringWithRange:range];

                             NSLog(@"Matched: %@", matched);

                         }];

        NSLog(@"filtered Message :%@", matched);
        int times =[[matched componentsSeparatedByString:@"&"]count]-1;
        NSLog(@"counted times :%i",times);

        if(times ==2){
            return YES;
        }else  
        {
            return NO;
        }       
    }
    else
    {   
        return NO;
    }
}

也改变了你的 BOOL 返回到 Objective-C 标准是和不而不是 TRUE 和 FALSE。

希望这是你的需要。

赞助商