Кто-нибудь знает мотыгу, чтобы получить NSString как "ÁlgeBra" в "Алгебра" без акцента и использовать только первую букву?
Спасибо,
RL
Кто-нибудь знает мотыгу, чтобы получить NSString как "ÁlgeBra" в "Алгебра" без акцента и использовать только первую букву?
Спасибо,
RL
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.
dreamlax уже упомянул метод capitalizedString
. Однако вместо того, чтобы делать преобразование с потерями в и из NSData
, чтобы удалить акцентированные символы, я думаю, что более элегантно использовать метод stringByFoldingWithOptions:locale:
.
NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];
В зависимости от характера строк, которые вы хотите преобразовать, вы можете установить фиксированный языковой стандарт (например, английский) вместо использования текущего языкового стандарта пользователя. Таким образом, вы можете получить одинаковые результаты на каждой машине.
Вот шаг за шагом пример того, как это сделать. Там есть место для улучшения, но вы получаете основную идею......
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 );