如何将 NSString
缩减为小写、ascii 字母字符 (/a-z/
)?非英语字母字符应转换为 ascii 字符。具体来说,大写字符变成小写字符(A → a),非英文字符变成英文字符(ñ → n),所有其他字符都被丢弃。
例如:“瑞典韦斯特罗斯” 变为 “vasterassweden”。
最佳答案
您可以将字符串转换为包含以不同编码表示字符串的字节的 NSData
,并允许使用 dataUsingEncoding:allowLossyConversion
进行有损转换。然后你可以将 NSData
转换回 NSString
:
NSString *unicode = @"Västerås, Sweden";
NSString *ascii = [[NSString alloc]
initWithData:[unicode dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES
]
encoding:NSASCIIStringEncoding
];
结果是“瑞典韦斯特罗斯”。如果您需要更进一步,现在有一个 lowercaseString
方法等。
编辑:
哎呀,错过了问题的结尾“所有其他字符都被丢弃”,您确实希望更进一步:
NSString *lower = [ascii lowercaseString];
NSString *letters = [[lower
componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet]
invertedSet]
]
componentsJoinedByString:@""
];
这看起来很糟糕(并且是转换为 C 字符串并更直接执行的一个很好的参数),但它完成了工作:componentsSeparatedByCharactersInSet:
通过处理中的字符返回一个字符串数组提供的套件作为分隔符; componentsJoinedByString:
将字符串数组连接成单个字符串,并由提供的字符串分隔 - 并且我们传递了一个空连接器。
关于objective-c - 将 NSString 减少为小写、ascii 字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9520770/