/ / Има ли по-добър начин "нормализиране" (замени неща като "а" с "а") низ в цел в? [дубликат] - цел-c, замяна, nsstring

Има ли по-добър начин "нормализиране" (замени неща като "а" с "а") низ в цел в? [дубликат] - цел-c, замяна, nsstring

За търсене трябва да премахна всички появявания на символи, съдържащи 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];