2013-04-14 7 views
0

Что такое лучший способ получить и заменить определенные слова в строке? , например, у меня естьЗаменить конкретные слова в NSString

NSString * currentString = @"one {two}, thing {thing} good"; 

теперь мне нужно найти каждый {currentWord}

и применять функции для него

[self replaceWord:currentWord] 

замените currentWord с результатом от функции

-(NSString*)replaceWord:(NSString*)currentWord; 
+0

вы хотите заменить каждое слово в {и}? –

+0

зависит от того, какое слово находится в {} , поэтому мне нужно найти {слово}, затем вырежьте слово из него, замените его, затем верните его как-то – user840250

+1

Ваш вопрос в неполном. PLZ объяснить, что вы точно хотите. какой шаблон вы хотите искать и т. д. –

ответ

3

В следующем примере показано, как вы можете использовать NSRegularExpression и enumerateMatchesInString для выполнения задачи. Я просто использовал uppercaseString как функция, которая заменяет слово, но вы можете использовать метод replaceWord, а также:

EDIT: Первая версия моего ответа не работать правильно, если замененные слова короче или длиннее, как оригинальные слова (спасибо Фабиану Крейзеру за это!). Теперь он должен работать правильно во всех случаях.

NSString *currentString = @"one {two}, thing {thing} good"; 

// Regular expression to find "word characters" enclosed by {...}: 
NSRegularExpression *regex; 
regex = [NSRegularExpression regularExpressionWithPattern:@"\\{(\\w+)\\}" 
                options:0 
                error:NULL]; 

NSMutableString *modifiedString = [currentString mutableCopy]; 
__block int offset = 0; 
[regex enumerateMatchesInString:currentString 
         options:0 
          range:NSMakeRange(0, [currentString length]) 
        usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
         // range = location of the regex capture group "(\\w+)" in currentString: 
         NSRange range = [result rangeAtIndex:1]; 
         // Adjust location for modifiedString: 
         range.location += offset; 

         // Get old word: 
         NSString *oldWord = [modifiedString substringWithRange:range]; 

         // Compute new word: 
         // In your case, that would be 
         // NSString *newWord = [self replaceWord:oldWord]; 
         NSString *newWord = [NSString stringWithFormat:@"--- %@ ---", [oldWord uppercaseString] ]; 

         // Replace new word in modifiedString: 
         [modifiedString replaceCharactersInRange:range withString:newWord]; 
         // Update offset: 
         offset += [newWord length] - [oldWord length]; 
        } 
]; 


NSLog(@"%@", modifiedString); 

Выход:

 
one {--- TWO ---}, thing {--- THING ---} good
+0

спасибо! работает довольно хорошо – user840250

+0

@ user840250: Добро пожаловать. –

+0

Код не работает, если слово замены короче или длиннее исходного слова. –

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