возвращение всего индекса символа в строке NSString - PullRequest
0 голосов
/ 02 августа 2011

Существует ли метод, который возвращает все индексы вхождений буквы 'a' в NSString, скажем?Пробовал смотреть документацию и там вроде что нету.Поэтому мне, возможно, придется разбить строку NSString на массив символов NS и выполнить итерацию?

Ответы [ 2 ]

0 голосов
/ 02 августа 2011
NSString *full_string=@"The Quick Brown Fox Brown";
    NSMutableArray *countloc=[[NSMutableArray alloc]init];
    int temp=0;
    int len=[full_string length];
    for(int i =0;i<[full_string length];i++)
    {
            NSRange range=[full_string rangeOfString:@"Brown" options:0 range:NSMakeRange(temp,len-1)];
            if(range.location<[full_string length])
            [countloc addObject:[NSString stringWithFormat:@"%d",range.location]];
            temp=range.location+1;
            len=[full_string length]-range.location;
            i=temp;

    }

Здесь поиск подстроки Brown и расположение подстроки сохраняется в массиве countloc

0 голосов
/ 02 августа 2011

Попробуйте [NSRegularExpression enumerateMatchesInString: параметры: диапазон: использование блока:].Или, действительно, любой из других методов сопоставления NSRegularExpression.Они не будут возвращать NSIndexSet - это будет массив объектов NSTextChecking - но вы можете легко получить индекс из этого.

Вот некоторый (непроверенный!) Пример кода:

NSString* aString = @"Here's a string, that contains some letters a";
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"a" options:0 error:NULL];
NSArray* matches = [regex matchesInString:aString options:0 range:NSMakeRange(0,[aString length])];
for(NSTextCheckingResult* i in matches) {
    NSRange range = i.range;
    NSUInteger index = range.location; //the index you were looking for!
    //do something here
}

На самом деле более эффективно использовать enumerateMatchesInString, но я не знаю, насколько вы знакомы с блоками, поэтому я выбрал более распространенное быстрое перечисление NSArray.

Update: тот же код с использованием блоков.

NSString* aString = @"Here's a string, that contains some letters a";
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"a";
[regex enumerateMatchesInString:aString 
                        options:0 
                          range:NSMakeRange(0,[aString length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    NSRange range = result.range;
    NSUInteger index = range.location; //the index you were looking for
    //do work here

}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...