NSString - как перейти от «ÁlgeBra» к «алгебре» - PullRequest
23 голосов
/ 19 февраля 2011

Кто-нибудь знает, как получить строку NSString, такую ​​как «ÁlgeBra», в «Алгебру», без акцента и использовать только первую букву?

Спасибо,

RL

Ответы [ 3 ]

55 голосов
/ 19 февраля 2011

Dreamlax уже упоминал метод capitalizedString . Однако вместо преобразования с потерями в NSData для удаления акцентированных символов, я думаю, что более элегантно использовать метод stringByFoldingWithOptions:locale:.

NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];

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

13 голосов
/ 19 февраля 2011

NSString имеет метод с именем capitalizedString:

Возвращаемое значение

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

NSString *str = @"AlgeBra";
NSString *other = [str capitalizedString];

NSLog (@"Old: %@, New: %@", str, other);

Edit:

Только что увидел, что вы хотели бы убрать и акценты. Вы можете пройти ряд шагов:

// original string
NSString *str = @"ÁlgeBra";

// convert to a data object, using a lossy conversion to ASCII
NSData *asciiEncoded = [str dataUsingEncoding:NSASCIIStringEncoding
                         allowLossyConversion:YES];

// take the data object and recreate a string using the lossy conversion
NSString *other = [[NSString alloc] initWithData:asciiEncoded
                                        encoding:NSASCIIStringEncoding];
// relinquish ownership
[other autorelease];

// create final capitalized string
NSString *final = [other capitalizedString];

В документации для dataUsingEncoding:allowLossyConversion: прямо говорится, что буква & lsquo; Á & rsquo; преобразуется в & lsquo; A & rsquo; при конвертации в ASCII.

1 голос
/ 19 февраля 2011

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

NSString *input = @"ÁlgeBra";
NSString *correctCase = [NSString stringWithFormat:@"%@%@",
                           [[input substringToIndex:1] uppercaseString],
                           [[input substringFromIndex:1] lowercaseString]];

NSString *result = [[[NSString alloc] initWithData:[correctCase dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding] autorelease];

NSLog( @"%@", result );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...