iOS开发中遇到的,输入一个包含汉字的字符串,输出其汉字的拼音。(字符串中含有的汉字提取)

项目中遇到一个说,输入人名自动识别出拼音并显示出来。那么,我就研究了一下,其实系统是本身自带的有方法去做这个校验的。

1.我先去对一串字符串进行判断,看是否包含有汉字,将包含的汉字提取出来,只转这些汉字就好。方法如下:

#pragma mark -获取一段字符串中的中文字

+ (NSArray *)getAStringOfChineseWord:(NSString *)string

{

    if (string == nil || [string isEqual:@""])

    {

        return nil;

    }

    NSMutableArray *arr = [[NSMutableArray alloc]init];

    for (int i=0; i<[string length]; i++)

    {

        int a = [string characterAtIndex:i];

        if (a < 0x9fff && a > 0x4e00)

        {

            [arr addObject:[string substringWithRange:NSMakeRange(i, 1)]];

        }

    }

    return arr;

}

获取到之后是一个数组,在我去做汉字转拼音时需要的肯定是一个字符串,那么这时候就简单了,直接数组转字符串。

#pragma mark - 点击事件

- (IBAction)pinjie:(id)sender {

    NSString *chineseString = @"快放假了啊哈哈llll233";

    //1.先将字符串中包含的中文抽出来

    NSArray *firstArray = [ViewController getAStringOfChineseWord:chineseString];

    NSString *chineseString2 = [firstArray componentsJoinedByString:@""];

    //2。将这个中文字符串转为拼音

    [self chineseCharactersToPinyin:chineseString2];

}


2.将这个中文字符转为拼音就好。既是上面点击事件里调用的第二个方法。

#pragma mark - 系统自带汉字转拼音

-(void)chineseCharactersToPinyin:(NSString *)chineseString{

    if ([chineseString length]) {

        NSMutableString *ms = [[NSMutableString alloc] initWithString:chineseString];

        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {

            NSLog(@"带声母的拼音:%@",ms);

        }

        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {

            NSLog(@"不带声母的拼音:%@",ms);

        }

        NSLog(@"不带声母的拼音(大写):%@",[ms uppercaseString]);

        NSLog(@"去掉空格的拼音(小写):%@",[ms stringByReplacingOccurrencesOfString:@" " withString:@""]);

        NSLog(@"去掉空格的拼音(大写):%@",[[ms stringByReplacingOccurrencesOfString:@" " withString:@""] uppercaseString]);

        NSArray *msArray = [ms componentsSeparatedByString:@" "];

        NSMutableArray *bigLetters = [NSMutableArray array];

        for (int i = 0; i < msArray.count; i++) {

            NSString *secondString = msArray[i];

            secondString = [secondString substringToIndex:1];

            

            //thirdString是将小写拼音字符串转化为大写拼音字符串

            NSString *thirdString = [secondString uppercaseString];

            [bigLetters addObject:thirdString];

        }

        

        NSString *forthString = [[bigLetters copy] componentsJoinedByString:@""];

        NSLog(@"首汉字的拼音:%@",forthString);

    }

}



当然,我这个是做过处理的,我是只要名字的拼音的首字母,我将所有的打印结果都写出来,你看需要哪个就取哪个。结果如下:



转载请标明出处,谢谢。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值