2015-07-10 2 views
0

Я хочу найти индекс 8-го вхождения ", чтобы я мог разбить мою строку там. Однако все, что я могу найти, это строка кода, которая дает мне массив всех вхождений «». Есть ли функция, которую я могу назвать, которая даст мне эту информацию?NSMutable String: Как получить индекс нескольких пробелов в строке?

int numberOfOccurences = [[myListString componentsSeparatedByString:@" "] count]; 

Edit 1: До сих пор это решение, которое я придумал:

if(numberOfOccurences > 8) 
{ 
    //find index of place where you want to split by picking an 
    //arbitrary number and finding the first white space 
    int index = (int)[[myListString substringFromIndex:45] rangeOfString:@" "].location; 

    NSLog(@"Index: %i", index); 

    //make substring 
    NSString *substringList1 = [myListString substringToIndex:(45+index)]; 
    NSString *substringList2 = [myListString substringFromIndex:(45+index)]; 
} 
+0

Вам нужно будет сделать это итеративно, найдя каждое последующее пространство в строке до тех пор, пока вы не достигнете 8. – trojanfoe

+1

Ваше решение не имеет смысла и выглядит ужасным способом сделать что-то. – Stonz2

+0

@ stonz2 Мое решение дает мне результат, который я искал. Почему вы думаете, что это так плохо? – Sooc

ответ

1

Там нет способа найти восьмой пространства, но есть строительные блоки, необходимые вам.

Метод NSStringrangeOfString:options:range: найдет первое вхождение его первого аргумента в пределах диапазона, указанного его третьим аргументом, он возвращает диапазон для соответствия. Вы просто начинаете с третьего аргумента, являющегося цельной строкой, а затем итерации, уменьшающей диапазон для поиска с использованием предыдущего результата.

Если вы действительно ищете пустое пространство, а не просто пространство, вы можете рассмотреть аналогичные методы rangeOfCharactersFromSet.

Если вы действительно не хотите восьмое место, но пытаетесь разбить строку на заданную длину, вы можете посмотреть на componentsSeparatedByString/componentsSeparatedByCharactersInSet, а затем собрать результирующие «слова» в строки соответствующей длины. Кроме того, можно посмотреть на NSScanner.

НТН

+0

Спасибо за ответ. Я придумал свой собственный хакерский способ сделать это, добавив в свой оригинальный пост. Жаль, что нет встроенного быстрого лайнера. – Sooc

0

с явным предположением, что вы ищете восьмому пространство (и, возможно, необходимость регулировать регулярное выражение немного в зависимости от набора символов), вы можете использовать регулярное выражение:

NSRegularExpression *exp = [NSRegularExpression regularExpressionWithPattern:@"^([^ ]*){8}+" 
                     options:0 
                     error:NULL]; 

NSRange result = [exp rangeOfFirstMatchInString:input options:0 range:inputRange]; 

Если result.location != NSNotFound, то result.length дает вам индекс, на котором следует разделить.

Смежные вопросы