Подтвердить что ты не робот

NSString - как перейти от "ÁlgeBra" к "Algebra"

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

Спасибо,

RL

4b9b3361

Ответ 1

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

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

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

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

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

Изменить:

Просто увидел, что вы также хотели бы удалить акценты. Вы можете пройти несколько этапов:

// 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.

Ответ 2

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

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

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

Ответ 3

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

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 );