Iphone NSString-如何从“开始”Á;“代数”;至;“代数”;
有没有人知道如何把像“ÁlgeBra”这样的字符串改为“Algebra”,而不带重音,只大写第一个字母 谢谢Iphone NSString-如何从“开始”Á;“代数”;至;“代数”;,iphone,nsstring,compare,Iphone,Nsstring,Compare,有没有人知道如何把像“ÁlgeBra”这样的字符串改为“Algebra”,而不带重音,只大写第一个字母 谢谢 RL这里有一个如何做的分步示例。有改进的余地,但你得到了基本的想法 NSString *input = @"ÁlgeBra"; NSString *correctCase = [NSString stringWithFormat:@"%@%@", [[input substringToIndex:1] uppercaseString]
RL这里有一个如何做的分步示例。有改进的余地,但你得到了基本的想法
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 );
NSString
有一个名为:
返回值
一种字符串,其中接收者中每个单词的第一个字符更改为其相应的大写值,其余所有字符设置为其相应的小写值
编辑:
刚才看到你想删除口音以及。您可以执行一系列步骤:
// 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];
的文档明确指出,当转换为ASCII时,字母“Á”将转换为“A”。。但是,我认为使用stringByFoldingWithOptions:locale:
方法比使用stringByFoldingWithOptions:locale:
方法更优雅,而不是在NSData
之间进行有损转换来删除重音字符
NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];
根据要转换的字符串的性质,您可能希望设置固定的区域设置(例如英语),而不是使用用户的当前区域设置。这样,您就可以确保在每台机器上得到相同的结果。这是正确的答案。不要做dreamlax建议的愚蠢的NSData NSString业务。allowLossyConversion技术确实处理了一些我无法用NSLocale处理的场景。对于exmaple,如果我有以下字符串:ßÄÆñ。当我运行StringByFolding时,我得到的选项是:ßAÆun。当我运行allowLossyConversion时,我得到:sAAEun。就我而言,我想要第二种选择。有没有一种方法可以用更少的黑客手段得到类似的答案?@Alex:这不是黑客手段,苹果公司建议在他们的文档中使用
allowLossyConversion
方法将一个省略号字符转换为三个ASCII句点@美国司法部不恰当地将这项技术命名为错误,但事实上这是一种合法的方法。如果将日语、阿拉伯语、汉语等字符传递到allowLossyConversion技术中,会发生什么?您当然不想将它们转换为ASCII字符串。@TapForms:这取决于所需的结果。不要这样做。这是错误的——请看下面奥勒·贝格曼的回答。当我尝试这样做时,我得到的是一个“?”字符,而不是预期的“OE”。我正在iOS 6上测试这个。有人在这项技术上运气好吗?@TapForms:在苹果公司提交一个bug。它与Æ一起工作,所以没有理由不与Œ一起工作。@dreamlax是的,它一定是个bug。我刚刚用以下字符串测试了您的代码:@“ŒÆß”,这是我得到的结果:“?aes”。运行经验是错误的。我可能只需要为OE添加一个特例并提交一个bug。这种方法非常适合我转换城市名称进行搜索。格但斯克到格但斯克,科尔多瓦到科尔多瓦
NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];