2012-05-24 5 views
0

При использовании stringByReplacingOccurrencesOfString он, кажется, заменяет слова внутри слов. Так, например,stringByReplacingOccurrencesOfString, заменяющий композиты более длинных слов

Дом скрепляются ...

замещающие вхождения «тем» с «А» приведет к

Дом был проведен togeAr по ...

Как я могу избежать этого? Я знаю, что я мог бы добавить пробелы по обе стороны от заменяемого слова, чтобы гарантировать, что это не часть более длинного слова, однако это не работает во всех случаях, особенно там, где заменяемое слово является первым или последним словом в предложении (т.е. пустое пространство не с обеих сторон).

ответ

4

Вы должны использовать NSRegularExpression с рисунком \bthe\b, где \b указывает границу слова.

NSString *input = @"The house was held together by..."; 
NSString *string = @"the"; 
NSString *replacement = @"A"; 

NSString *pattern = [NSString stringWithFormat:@"\\b%@\\b", string]; 
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; 
NSString *result = [regex stringByReplacingMatchesInString:input options:0 range:NSMakeRange(0, input.length) withTemplate:replacement]; 

NSLog(@"%@", result); 
// A house was held together by... 
+0

Вау, я буквально не могу вас поблагодарить. Так просто. Никогда раньше не слышал о регулярных выражениях. Ну, слышал о них, понятия не имел, что это. Это решило проблему, на которую я застрял некоторое время. У меня были всевозможные сложные методы, чтобы попытаться заставить его работать ... – Smikey

1

Для более сложных операций замены вы можете использовать NSRegularExpression. Вы можете найти что-то вроде (^|)the($|) и заменить спички.

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