0

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

我想也许使用 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 个单词,如果找到,则将其替换为指定的单词并停止。

真棒=>愚蠢

因为 => 苹果

猫 => 狗

“这是一串文本,而且是一串很棒的文本……因为它充满了 foo。”

会变成

“这是一串文本,而且是一串无用的文本……因为它充满了 foo。”

一旦找到第一个单词,它应该停止。我是走错了方向还是有更好的方法来实现这一目标?也许使用 NSScanner?

4

2 回答 2

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;
于 2014-03-18T11:54:33.797 回答
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);
}
于 2012-09-28T05:56:39.367 回答