1

我从用户那里获取了一个字符串,并对其进行了一些迭代。

例如用户输入文字@“今天天气真好。”;

"the wether is beatifullll tdy"当用户输入or"th weather is beatttiful tooodayy"或时,我想进行相同的迭代"the weatherrr iss beautiful toda"

这是我的代码:

// (str is the user's text)

if ([str rangeOfString:@"hello" options:NSCaseInsensitiveSearch].location != NSNotFound) {
// when user entered helloo I want make to same iteration,
// but in this case the program goes else part.        
    [array insertObject:@"hello" atIndex:s];
} else if ([str rangeOfString:@"You are so beautiful" options:NSCaseInsensitiveSearch].location != NSNotFound ) {
    [dizi insertObject:@"I know, Thanks" atIndex:s];
} else if ([str rangeOfString:@"Have Lunch?" options:NSCaseInsensitiveSearch].location != NSNotFound) {
    [array insertObject:@"Yes,I have" atIndex:s];
} else {
    [array insertObject:@"please,speak english" atIndex:s];
}
4

1 回答 1

1

您可以使用 StringScore 进行模糊匹配:

https://github.com/thetron/StringScore

例子:

NSString *testString = @"Hello world!";

CGFloat result1 = [testString scoreAgainst:@"Hello world!"];
CGFloat result2 = [testString scoreAgainst:@"world"];
CGFloat result3 = [testString scoreAgainst:@"wXrld" fuzziness:[NSNumber numberWithFloat:0.8]];
CGFloat result4 = [testString scoreAgainst:@"world" fuzziness:nil options:NSStringScoreOptionFavorSmallerWords];
CGFloat result5 = [testString scoreAgainst:@"world" fuzziness:nil options:(NSStringScoreOptionFavorSmallerWords & NSStringScoreOptionReducedLongStringPenalty)];
CGFloat result6 = [testString scoreAgainst:@"HW"]; // abbreviation matching example

NSLog(@"Result 1 = %f", result1);
NSLog(@"Result 2 = %f", result2);
NSLog(@"Result 3 = %f", result3);
NSLog(@"Result 4 = %f", result4);
NSLog(@"Result 5 = %f", result5);
NSLog(@"Result 6 = %f", result6);

输出:

Result 1 = 1.000000
Result 2 = 0.425000
Result 3 = 0.271528
Result 4 = 0.250000
Result 5 = 0.425000
Result 6 = 0.645833
于 2013-08-21T07:01:03.523 回答