За търсене трябва да премахна всички появявания на символи, съдържащи circumflex, a caret, или apostrophe като á
с "нормално" a
, Има ли по-добър начин от ръчно заместване на всички известни събития като това?
_string = [_string stringByReplacingOccurrencesOfString:@"é" withString:@"e"];
_string = [_string stringByReplacingOccurrencesOfString:@"è" withString:@"e"];
_string = [_string stringByReplacingOccurrencesOfString:@"ê" withString:@"e"];
_string = [_string stringByReplacingOccurrencesOfString:@"á" withString:@"a"];
_string = [_string stringByReplacingOccurrencesOfString:@"à" withString:@"a"];
_string = [_string stringByReplacingOccurrencesOfString:@"â" withString:@"a"];
_string = [_string stringByReplacingOccurrencesOfString:@"ó" withString:@"o"];
_string = [_string stringByReplacingOccurrencesOfString:@"ò" withString:@"o"];
_string = [_string stringByReplacingOccurrencesOfString:@"ô" withString:@"o"];
_string = [_string stringByReplacingOccurrencesOfString:@"ú" withString:@"u"];
_string = [_string stringByReplacingOccurrencesOfString:@"ù" withString:@"u"];
_string = [_string stringByReplacingOccurrencesOfString:@"û" withString:@"u"];
_string = [_string stringByReplacingOccurrencesOfString:@"í" withString:@"i"];
_string = [_string stringByReplacingOccurrencesOfString:@"ì" withString:@"i"];
_string = [_string stringByReplacingOccurrencesOfString:@"î" withString:@"i"];
Това е пример за код, така че знам, че една линия е подобрение за това решение. Но това изобщо не може да се поддържа.
Отговори:
2 за отговор № 1Как правиш това търсене? Ако сравнявате струните в собствения си код, можете да ги използвате -[NSString compare:options:]
с опции като NSDiacriticInsensitiveSearch
и NSWidthInsensitiveSearch
както и по-добре познатите NSCaseInsensitiveSearch
, Ако пропуснете NSLiteralSearch
, тогава разложените последователности ще съответстват на техните предварително съставени, които обикновено са това, което искате.
Ако използвате предикат, можете да приложите [d]
модификатор към оператора за сравнение, като CONTAINS[d]
.
Ако наистина искате да трансформирате низа, а не просто да променяте как сравнявате, вие искате -stringByFoldingWithOptions:locale:
метод:
_string = [_string precomposedStringWithCanonicalMapping];
_string = [_string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil];