我想与字符串进行比较。但isEqualToString对我没用。因为我不希望它们完全相同。我的一个字符串是列夫托尔斯泰,另一个是托尔斯泰;我希望他们匹配。有什么想法吗?
答案 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
对于更复杂的情况,请看一下: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;
}
选择一个值,以便您对结果感到满意。