Подтвердить что ты не робот

Получите подстроку из NSString до получения определенного слова

Скажем, у меня есть это NSString: @"Country Address Tel:number". Как я могу сделать, чтобы получить подстроку, которая до Tel? (Адрес страны) И затем Как я могу сделать, чтобы получить подстроку, которая после Tel? (Число)

4b9b3361

Ответ 1

Используйте NSScanner:

NSString *string = @"Country Address Tel:number";
NSString *match = @"tel:";
NSString *preTel;
NSString *postTel;

NSScanner *scanner = [NSScanner scannerWithString:string];
[scanner scanUpToString:match intoString:&preTel];

[scanner scanString:match intoString:nil];
postTel = [string substringFromIndex:scanner.scanLocation];

NSLog(@"preTel: %@", preTel);
NSLog(@"postTel: %@", postTel);

Выход NSLog:

preTel: Адрес страны
postTel: число

Ответ 2

Самый простой способ - если вы знаете разделитель, (если он всегда :), вы можете использовать это:

NSArray *substrings = [myString componentsSeparatedByString:@":"];
NSString *first = [substrings objectAtIndex:0];
NSString *second = [substrings objectAtIndex:1];

который разделит вашу строку на две части и даст вам массив с каждой подстрокой

Ответ 3

Вот расширение ответа zaph, которое я успешно выполнил.

-(NSString*)stringBeforeString:(NSString*)match inString:(NSString*)string
{
      if ([string rangeOfString:match].location != NSNotFound)
      {
            NSString *preMatch;

            NSScanner *scanner = [NSScanner scannerWithString:string];
                   [scanner scanUpToString:match intoString:&preMatch];

            return preMatch;
      }
      else
      {
            return string;
      }
}

-(NSString*)stringAfterString:(NSString*)match inString:(NSString*)string
 {   
       if ([string rangeOfString:match].location != NSNotFound)
       {
            NSScanner *scanner = [NSScanner scannerWithString:string];

            [scanner scanUpToString:match intoString:nil];

             NSString *postMatch;

             if(string.length == scanner.scanLocation)
             {
                   postMatch = [string substringFromIndex:scanner.scanLocation];
             }
             else
             {
                   postMatch = [string substringFromIndex:scanner.scanLocation + match.length];
             }

             return postMatch;
       }
       else
       {
             return string;
       }
}