rangeOfString хорошо, но не идеально подходит для сравнения строк - PullRequest
2 голосов
/ 02 декабря 2011

Я хотел бы сравнить разные строки, и ни isEqualToString, ни rangeOfString не могут, в моем случае, выполнить работу, по-видимому.

Например, у меня есть следующие строки:

s1 = Hello World
s2 = World

Теперь я хотел бы сравнить их, и это прекрасно работает с rangeOfString, верните true, проблема в том, когда я сравниваю, например, это:

s1 = helloworldhello
s2 = world

в моем случае это должно вернуть false, но rangeOfString вернет true.

Условие следующее:

I want to find exact matches.
I want to find similar strings for example "Anna" should be equal to "Hanna Anna"
I do not want to find half words for example "Ann" should not be equal to "Anna"
I do not want to find a part of a word for example "nn" should not be equal to "Anna"

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

В случае, если вы ищете «Мир» как диапазон использования одного слова с регулярным выражением:

NSString *s1;
NSString *s2;
NSRange range;

s1 = @"Hello World";
s2 = @"World";
range = [s1 rangeOfString:s2 options:NSRegularExpressionSearch];
NSLog(@"match: %i", range.location != NSNotFound);

Вывод NSLog: матч: 1

s1 = @"helloworldhello";
s2 = @"\\bworld\\b";
range = [s1 rangeOfString:s2 options:NSRegularExpressionSearch];
NSLog(@"match: %i", range.location != NSNotFound);

Вывод NSLog: матч: 0

s1 = @"Hanna Anna";
s2 = @"\\bAnna\\b";
range = [s1 rangeOfString:s2 options:NSRegularExpressionSearch];
NSLog(@"match: %i", range.location != NSNotFound);

Вывод NSLog: матч: 1

s1 = @"Anna";
s2 = @"\\bAnn\\b";
range = [s1 rangeOfString:s2 options:NSRegularExpressionSearch];
NSLog(@"match: %i", range.location != NSNotFound);

Вывод NSLog: матч: 0

s1 = @"Anna";
s2 = @"\\bnn\\b";
range = [s1 rangeOfString:s2 options:NSRegularExpressionSearch];
NSLog(@"match: %i", range.location != NSNotFound);

Вывод NSLog: матч: 0

Обратная косая черта-b означает границу слова, и обратная косая черта должна быть экранирована.

2 голосов
/ 02 декабря 2011

Добавьте пробел по обе стороны от s2, если это действительно то, что вы ищете, например,

s0 = @"hello world";
s1 = @"helloworldhello";

s2 = @" world ";

Теперь выполните поиск, но добавьте пробел в любом конце s0 и s1, чтобы избежать надоедливых граничных случаев.

Если вы хотите быть более элегантным, найдите строку, используя rangeOfString:, и убедитесь, что нет ничего (начало / конец строки), пробела или пунктуации до и после появления s2 .

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