最新项目有一个功能,用户在输入框里面输入文字,需要自动将文字转换为大写,以前使用OC的直接转译的方法,会导致在两个连续的文字转成拼音之后,拼音中间会自动的生成一个空格,这个不满足现有的需求。
这是以前的方法,不符合产品预期。
//2.再转换为不带声调的拼音
CFStringTransform(( __bridge CFMutableStringRef)pinYin, NULL, kCFStringTransformStripDiacritics, NO);
然后又重新写了一个转拼音的方法,在汉字转拼音的过程中,对有空格的字符不做任何处理,然后再没有空格的时候对汉字进行拼音转译。就是下面的代码
///汉字转拼音
+(NSString *)transformPinYinWithString:(NSString *)chinese{
NSString *pinYinStr = @"";
// NSString *consigString = @"";
if (chinese.length) {
NSRange range;
for (int i = 0; i < chinese.length ; i += range.length ) {
range = [chinese rangeOfComposedCharacterSequenceAtIndex:i];
NSString *subStr = [chinese substringWithRange:range];
NSMutableString *pinYin = [[NSMutableString alloc]initWithString:subStr];
if ([pinYin isEqualToString:@" "]) {}else{
//1.先转换为带声调的拼音
CFStringTransform(( __bridge CFMutableStringRef)pinYin, NULL, kCFStringTransformMandarinLatin, NO);
//2.再转换为不带声调的拼音
CFStringTransform(( __bridge CFMutableStringRef)pinYin, NULL, kCFStringTransformStripDiacritics, NO);
}
pinYinStr = [pinYinStr stringByAppendingString:pinYin];
}
[pinYinStr uppercaseString];
// consigString = [pinYinStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
return pinYinStr;
}