2012-02-23 38 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選擇一個值,以便您對結果感到滿意。