NSString - 如何从"ÁlgeBra"走向"代数"

Rui*_*pes 23 iphone compare nsstring

有没有人知道锄头将"ÁlgeBra"这样的NSString改为"代数",没有重音,只有首字母大写?

谢谢,

RL

Ole*_*ann 55

dreamlax已经提到了这种capitalizedString方法.NSData但是,我认为使用该stringByFoldingWithOptions:locale:方法更优雅,而不是进行有损转换以及删除重音字符.

NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];
Run Code Online (Sandbox Code Playgroud)

根据要转换的字符串的性质,您可能希望设置固定的区域设置(例如英语),而不是使用用户的当前区域设置.这样,您可以确保在每台机器上获得相同的结果.

  • @Alex:这不是一个黑客,Apple在他们的文档中建议使用`allowLossyConversion`方法将省略号字符转换为三个ASCII周期.@thefaj错误地将这种技术命名为错误但实际上它是一种合法的方法. (4认同)
  • *这*是正确的答案.不要做dreamlax建议的愚蠢的NSData < - > NSString业务. (3认同)

dre*_*lax 13

NSString有一个方法叫capitalizedString:

回报价值

带有接收器中每个字的第一个字符的字符串更改为其对应的大写值,并且所有剩余字符设置为其对应的小写值.

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

NSLog (@"Old: %@, New: %@", str, other);
Run Code Online (Sandbox Code Playgroud)

编辑:

刚刚看到你想删除重音符号.您可以执行一系列步骤:

// 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];
Run Code Online (Sandbox Code Playgroud)

dataUsingEncoding:allowLossyConversion:明确说明转换为ASCII时字母'Á'将转换为'A' 的文档.

  • 不要这样做.这是错误的 - 请参阅下面的Ole Begemann的回复. (3认同)