项目中遇到一个说,输入人名自动识别出拼音并显示出来。那么,我就研究了一下,其实系统是本身自带的有方法去做这个校验的。
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];
}
#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);
}
}