如何将NSString
缩小为小写ASCII字符(/a-z/
)?非英文字母字符应转换为ASCII字符。具体而言,大写字符变为小写字母(A → a),非英文字符变为英文字符(ñ→ n),所有其他字符都将被丢弃。将NSString缩小为小写ASCII字母字符
例如:“韦斯特罗斯,瑞典”成为“vasterassweden”。
如何将NSString
缩小为小写ASCII字符(/a-z/
)?非英文字母字符应转换为ASCII字符。具体而言,大写字符变为小写字母(A → a),非英文字符变为英文字符(ñ→ n),所有其他字符都将被丢弃。将NSString缩小为小写ASCII字母字符
例如:“韦斯特罗斯,瑞典”成为“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:
将一串字符串连接到由提供的字符串分隔的单个字符串中 - 并且我们传递了一个空的连接器。
你可以做到这一点如下:
NSString *inputString = @"Västerås ;; Swed en ";
NSLog(@"Input String %@",inputString);
inputString = [inputString lowercaseString]; // Lower case
inputString = [inputString stringByReplacingOccurrencesOfString:@" " withString:@""]; //Whitespace
inputString = [[inputString componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""]; //Punctuation
inputString = [[inputString componentsSeparatedByCharactersInSet:[NSCharacterSet decomposableCharacterSet]] componentsJoinedByString:@""]; // non-english characters