objective-c - 将 NSString 减少为小写、ascii 字母字符

标签 objective-c cocoa nsstring

如何将 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/

相关文章:

ios - iPhone SDK : Break chinese sentence into words and letters

ios - iOS 中 NSString 中字符的索引

ios - 如何检测物理 body 区域的触摸?

swift - MASShortcut 没有这样的模块

objective-c - cocoa 沙盒应用程序 : Spawn FFMPEG

xcode - Apple 沙盒和 AXUIElementRefs

iphone - 您应该使用 'isEqual' 还是 '=='?

iphone - 编码为 NSValue 结构数组

objective-c - 在 NSString 中存储和检索 unsigned long long 值

objective-c - 将 NSString 转换为 NSNumber 会导致数字过多和奇怪的舍入