如何将NSString
缩小为小写的ascii字母字符(/a-z/
)?非英语字母字符应转换为ascii字符。具体来说,大写字符变为小写(A→a),非英语字符变为英文字符(ñ→n),所有其他字符都被丢弃。
例如:“Västerås,Sweden”变为“vasterassweden”。
答案 0 :(得分:6)
您可以将字符串转换为包含代表不同编码字符串的字节的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:
将一个字符串数组连接到由提供的字符串分隔的单个字符串中 - 我们已经传递了一个空连接符。
答案 1 :(得分:1)
您可以按照以下方式执行此操作:
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