2012-02-23 37 views
-1

我想比较字符串。但isEqualToString对我无用。因为我不希望他们完全一样。我的一个琴弦是列夫托尔斯泰,另一个是托尔斯泰;我希望他们被匹配。有任何想法吗?比较不完全相同的字符串

+2

这与规范太模糊了。你想要所有有共同字的字符串匹配吗?或者你想只匹配名字? – 2012-02-23 10:36:13

+0

你有什么想法,它会忽略人物是大还是小。我从textfield获得价值。如果用户写小,他们不匹配。它的工作原理是 – 2012-02-23 14:01:05

回答

7

如果你总是知道你正在寻找的子字符串,试试这个(这些词的顺序并不重要,所以即使“列夫托尔斯泰”将匹配):

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

有关的更多信息rangeOfString:看看苹果documentationNSString

对于更复杂的情况下,看看这个:像你想approximate/fuzzy string matching地方,而THA http://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28string_functions%29

+0

。非常感谢。你有什么想法,它会忽略人物是大还是小。我从textfield获得价值。如果用户写小,他们不匹配。 – 2012-02-23 13:11:36

0

有很多选择由NSString提供。

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

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

有根据您的测试将是什么,包括搜索与rangeOfString,或hasPrefix子许多其他的选择。

0

这听起来NA直截了当isEqual:功能,基于精确匹配返回BOOL,你有两个功能(上NSString),用线沿线的原型:

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

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

- (BOOL)isSufficientlyCloseTo:(NSString *)otherString { 
    return [self distanceToString:otherString] <= MY_MAGIC_THRESHOLD; 
} 

所以你基本上需要一个距离函数和一个相等的阈值。距离函数的一个简单示例应该是the Levenshtein distance - 然后您需要通过实验为MY_MAGIC_THRESHOLD选择一个值,以便您对结果感到满意。