迭代字符串的最快方法,替换特定项目(如果存在)?

时间:2012-09-28 04:10:32

标签: objective-c nsdictionary

我正在收到用户的句子或文本段落的字符串。我需要检查每个字符串,看看是否存在特定的单词。如果确实如此,则需要将其替换为与找到的单词绑定的特定单词。

我想也许可以使用NSDictionary并将作为要搜索的单词,并将对象作为要替换的单词。迭代字典。 - 我认为它很接近但需要一点指导。

NSString *inputText = userInput;
NSString *finalOutput;

NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys: 
                     @"awesome", @"dumb", 
                     @"because", @"apple", nil];

[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    finalOutput = [inputText stringByReplacingOccurrencesOfString:key withString:obj];        
}];

所以基本上搜索X字的文字X字,如果找到一个然后用指定的字替换它并停止。

awesome =>哑

因为=>苹果

cat =>狗

“这是一个文本字符串,它是一个 awesome 文本字符串..因为它充满了foo。”

会变成

“这是一个文本字符串,它是一个 dumb 文本字符串..因为它充满了foo。”

一旦找到第一个字就应该停止。 我是朝着错误的方向前进还是有更好的方法来实现这个目标?也许使用NSScanner?

2 个答案:

答案 0 :(得分:1)

我知道这个帖子已经老了但是请尝试通过字符串枚举并替换单词。

NSString *fullText =@"Some text that needs to have words replaced!"
NSDictionary *replacementDict = @{@"replaced" : @"stuff"}

__block NSString *newStr = [NSString stringWithString:fullText];
__block BOOL replacementDone = YES;


while (replacementDone) {
    replacementDone = NO;
    newStr = [NSString stringWithString:newStr];
    NSRange wordRange = NSMakeRange(0, newStr.length);
    [newStr enumerateSubstringsInRange:wordRange
                               options: NSStringEnumerationByWords
                            usingBlock:^(NSString *substring, NSRange substringRange,    NSRange enclosingRange, BOOL *stop){
                                NSString *lowWord = [substring lowercaseString];
                                if ([replacementDict objectForKey:substring])
                                {
                                    *stop = YES;
                                    newStr = [newStr stringByReplacingCharactersInRange:substringRange withString:[replacementDict objectForKey:substring]];
                                    replacementDone = YES;
                                }

                            }];
}


return newStr;

答案 1 :(得分:0)

选中此项以替换字符串中的第一个单词(替换字符串):

NSString *str3 = @"This is a string of text, and it is an awesome string of text.. because it is full of foo awesome";
NSLog(@"%@",str3);
NSString *outputString;
NSRange range = [str3 rangeOfString:@"awesome"]; //Find string
if(range.location != NSNotFound)
{ 

    outputString = [str3 stringByReplacingCharactersInRange:range withString:@"dumb"];

 OR use this

    //string exists
    //copy upto found string in new string
    outputString = [str3 substringToIndex:range.location]; 
    //now add your replace string plus remaining string
    outputString = [outputString stringByAppendingString:[NSString stringWithFormat:@"dumb%@",[str3 substringFromIndex:range.location+range.length]]];    

    NSLog(@"%@",outputString);
}