汉字转拼音

284 阅读1分钟

最新项目有一个功能,用户在输入框里面输入文字,需要自动将文字转换为大写,以前使用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;
}