如何判断2个字符串是否几乎相同?

时间:2013-03-04 14:01:56

标签: xcode nsstring compare

我从用户那里拿一个字符串,然后对它进行一些迭代。

例如,用户输入了文字@“今天的天气很美。”;

我想在用户输入"the wether is beatifullll tdy""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];
}

1 个答案:

答案 0 :(得分: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