将NSString减小为小写,ascii alpha字符

Sim*_*ave 2 cocoa objective-c nsstring

如何将NSStringascii alpha字符(/a-z/)缩小为小写?非英语字母字符应转换为ascii字符.具体来说,大写字符变为小写(A→a),非英语字符变为英文字符(ñ→n),所有其他字符都被丢弃.

例如:"Västerås,Sweden"成为"vasterassweden".

CRD*_*CRD 6

您可以将字符串转换为NSData包含不同编码的字符串的字节,并允许使用有损转换dataUsingEncoding:allowLossyConversion.然后你可以将NSData背面转换为NSString:

NSString *unicode = @"Västerås, Sweden";
NSString *ascii = [[NSString alloc]
                   initWithData:[unicode dataUsingEncoding:NSASCIIStringEncoding
                                      allowLossyConversion:YES
                                ]
                       encoding:NSASCIIStringEncoding
                  ];
Run Code Online (Sandbox Code Playgroud)

结果是"瑞典韦斯特罗斯".现在有一个lowercaseString方法等,如果你需要更进一步.

编辑:

哎呀,错过了问题的结尾"和所有其他角色都被丢弃了",你确实希望更进一步:

NSString *lower = [ascii lowercaseString];
NSString *letters = [[lower
                      componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet]
                                                            invertedSet]
                                                           ]
                      componentsJoinedByString:@""
                    ];
Run Code Online (Sandbox Code Playgroud)

这看起来很糟糕(并且转换为C字符串并且更直接地执行它是一个很好的参数),但它完成了工作:componentsSeparatedByCharactersInSet:通过将提供的集合中的字符视为分隔符来返回字符串数组; componentsJoinedByString:将一个字符串数组连接成一个由提供的字符串分隔的单个字符串 - 我们已经传递了一个空连接符.