Сравнение строк, которые не совпадают - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу сравнить со строками. Но isEqualToString для меня бесполезен. Потому что я не хочу, чтобы они были точно такими же. Если одна из моих строк - Лев Толстой, а другая - просто Толстой; Я хочу, чтобы они соответствовали. Есть идеи?

Ответы [ 3 ]

7 голосов
/ 23 февраля 2012

Если вы всегда знаете искомую подстроку, попробуйте следующее (порядок слов не имеет значения, поэтому даже «Толстой Лев» будет соответствовать):

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

0 голосов
/ 23 февраля 2012

Звучит так, как вы хотите приблизительное / нечеткое совпадение строк , где вместо прямой функции isEqual:, которая возвращает BOOL на основе точного соответствия, у вас есть две функции (на NSString), с прототипами по направлениям:

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

Второй - это удобная оболочка, реализованная примерно так:

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

Таким образом, вам в основном нужна функция расстояния и порог равенства. Простым примером функции расстояния будет расстояние Левенштейна - затем вам нужно экспериментально выбрать значение для MY_MAGIC_THRESHOLD, чтобы вы были довольны результатом.

0 голосов
/ 23 февраля 2012

Существует множество опций, предоставляемых NSString .

В вашем случае вы можете использовать hasSuffix следующим образом:

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

Существует множество других опций, в зависимости от того, что будет тестировать, включая поиск подстрок с помощью rangeOfString или hasPrefix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...