比较不完全相同的字符串

时间:2012-02-23 10:25:24

标签: iphone objective-c

我想与字符串进行比较。但isEqualToString对我没用。因为我不希望它们完全相同。我的一个字符串是列夫托尔斯泰,另一个是托尔斯泰;我希望他们匹配。有什么想法吗?

3 个答案:

答案 0 :(得分:7)

如果你总是知道你正在寻找的子串,试试这个(这个词的顺序无关紧要,所以即使'托尔斯泰列夫'也会匹配):

NSString *string = @"Lev Tolstoy";
if ([string rangeOfString:@"Tolstoy"].location == NSNotFound) {
  NSLog(@"string does not contain 'Tolstoy'");
} else {
  NSLog(@"string contains 'Tolstoy'!");
}

有关rangeOfString:的更多信息,请查看NSString

的Apples documentation

对于更复杂的情况,请看一下:http://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28string_functions%29

答案 1 :(得分:0)

NSString提供了许多选项。

对于您的情况,您可以像这样使用hasSuffix:

NSString* str = @"Lev Tolstoy"
NSString* suffix = @"Tolstoy"
if ([str hasSuffix:suffix]) {
   // do something useful
}

还有很多其他选项,具体取决于您的测试内容,包括使用rangeOfString或hasPrefix搜索子字符串。

答案 2 :(得分:0)

听起来你想要approximate / fuzzy string matching,而不是基于完全匹​​配返回isEqual:的直接BOOL函数,你有两个函数(在{{1}上) }),原型如下:

NSString

第二个是便利包装器,实现类似:

- (NSUInteger)distanceToString:(NSString *)otherString;
- (BOOL)isSufficientlyCloseTo:(NSString *)otherString;

所以你基本上需要一个距离函数和一个相等的阈值。距离函数的一个简单示例是the Levenshtein distance - 然后您需要通过实验为- (BOOL)isSufficientlyCloseTo:(NSString *)otherString { return [self distanceToString:otherString] <= MY_MAGIC_THRESHOLD; } 选择一个值,以便您对结果感到满意。