2010-03-03 3 views
1

Можно создать дубликат:
Number of occurrences of a substring in an NSString?NSString: номер слова

Я хотел бы знать, если есть метод, который возвращает возникновение данного слова.


NSString *string = @"ok no ok no no no ok"; 
// How to return 4 for the word no ? 

Благодарим за помощь!

+2

Дубликат: HTTP : //stackoverflow.com/questions/2166809/number-of-occurrences-of-a-substring-in-an-nsstring/2166955 – kennytm

+0

Это действительно поможет, если вы можете быть более конкретным. Как вы определяете слово? Достаточно ли проверять пробелы в строке поиска, или вам нужно учитывать знаки препинания, другие языки и т. Д.? –

ответ

5

использовать этот API: - (NSArray *) componentsSeparatedByString: (NSString *) Сепаратор

NSString* stringToSearch = @"ok no ok no no no ok"; 
NSString* stringToFind = @"no"; 
NSArray *listItems = [list componentsSeparatedByString:stringToFind]; 
int count = [listItems count] - 1; 

вы получите количество вхождений строки @ "нет" в "считать" переменной

+1

Блестящий ответ, оцененный! –

1

Может быть не самым быстрым способом, но вы можете использовать метод NSString componentsSeparatedByString, чтобы отделить значения в массив, а затем работать с этим массивом, чтобы проверить, сколько раз строки «нет» содержатся ...

в противном случае, работа на C строку PTR, и петлю, приращение PTR, при использовании strncmp() или так ...

+2

Что у вас и библиотеки строк? ;) NSString намного проще работать в контексте Obj-C. –

+1

lol;) ИМХО, это зависит от того, чего вы хотите достичь, и если вам нужна производительность по сравнению с простотой использования ... – Macmade

+1

Мне нужна производительность, она должна быть очень быстрой. – Pierre

2

Если вы пишете только 10.5+ приложение, вы должны быть в состоянии использовать NSString-х stringByReplacingOccurrencesOfString:withString: чтобы сделать это с помощью довольно минимального кода, проверив длину до и после удаления строки, которую вы ищете.

Пример ниже (непроверенный, поскольку я работаю над 10.4, но не могу понять, почему это не сработает.) Я бы не сделал ваше приложение 10.5+ только для того, чтобы использовать его, хотя и было предложено много других методов Macmade и в дублированном вопросе.

NSString* stringToSearch = @"ok no ok no no no ok"; 
NSString* stringToFind = @"no"; 

int lengthBefore, lengthAfter, count; 

lengthBefore = [stringToSearch length]; 
lengthAfter = [[stringToSearch stringByReplacingOccurrencesOfString:stringToFind withString:@""] length]; 
count = (lengthBefore - lengthAfter)/[stringToFind length]; 

NSLog(@"Found the word %i times", count); 
2

Вы хотите использовать NSScanner для такого рода деятельности.

NSString *string = @"ok no ok no no no ok"; 
NSScanner *theScanner; 
NSString *TARGET = @"no"; // careful selecting target string this would detect no in none as well 
int count = 0; 

theScanner = [NSScanner scannerWithString:string]; 

while ([theScanner isAtEnd] == NO) 
{ 
    if ([theScanner scanString:TARGET intoString:NULL]) 
     count++; 
} 

NSLog(@"target (%@) occurrences = %d", TARGET, count) 

;

+0

good ans ....... – Saad

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