Сравните NSString учета для статей (то есть "the" и "a") - PullRequest
1 голос
/ 03 декабря 2009

Я думал, что caseinsensitiveLocalizedCompare: позаботится об этом (не включая «и» в сравнении), но это не так.

(Кроме того, в ответ на первый ответ, приведенный ниже, я понимаю, что часть, не учитывающая регистр, не поможет, но я подумал, что часть, локализованная, может помочь.

Я не могу найти никаких вариантов, чтобы сделать это, и Google непригоден для использования, так как я ищу "the" и "a".

Я подумал, так как это очень часто, что-то будет существовать в Какао.

Я реализую свой собственный метод, но решил, что для этого есть встроенный способ.

Ответы [ 2 ]

1 голос
/ 03 декабря 2009

Когда вы задаетесь вопросом, поддерживает ли Какао что-то, обычно это помогает просмотреть документацию - в этом случае список всех опций, которые NSString поддерживает для сравнений .

При реализации этого не забудьте поместить список статей в локализованный файл ресурсов в вашем комплекте приложений, чтобы локализаторы могли предоставлять списки удаляемых статей на своих языках. Загружайте этот файл по требованию и сохраняйте его в течение всего процесса. В качестве альтернативы для некоторых вещей (например, названий групп) может быть лучше иметь один файл со всеми известными статьями.

0 голосов
/ 16 декабря 2009

Для полноты ниже мой код используется для решения сортировки моих объектов. Добавьте это в категорию на NSString.

- (NSComparisonResult)localizedCaseInsensitiveExcludeTheCompare:(NSString*)aString{

    NSString* firstString = [self stringByRemovingArticlePrefixes];
    aString = [aString stringByRemovingThePrefixes];

    return [firstString localizedCaseInsensitiveCompare:aString];    

}

- (NSString*)stringByRemovingThePrefixes{

    if([self length] < 5)
        return self; 

    NSString* aString = [self copy];

    if([[aString substringToIndex:4] doesContainString:@"The "]){

        aString = [aString substringFromIndex:4];
        aString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    }else if([[aString substringToIndex:4] doesContainString:@"the "]){

        aString = [aString substringFromIndex:4];
        aString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    }

    return [aString autorelease];
}
...