123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- //
- // ChineseString.m
- // https://github.com/c6357/YUChineseSorting
- //
- // Created by BruceYu on 15/4/19.
- // Copyright (c) 2015年 BruceYu. All rights reserved.
- //
- #import "JXChatChineseString.h"
- @implementation JXChatChineseString
- #pragma mark - 返回tableview右方 indexArray
- +(NSMutableArray*)IndexArray:(NSArray*)stringArr
- {
- NSMutableArray *tempArray = [self ReturnSortChineseArrar2:stringArr];
- NSMutableArray *A_Result = [NSMutableArray array];
- NSString *tempString ;
-
- for (NSString* object in tempArray)
- {
- NSString *pinyin = [((JXChatChineseString*)object).pinYin substringToIndex:1];
- //不同
- if(![tempString isEqualToString:pinyin])
- {
- // NSLog(@"IndexArray----->%@",pinyin);
- [A_Result addObject:pinyin];
- tempString = pinyin;
- }
- }
- return A_Result;
- }
- #pragma mark - 返回联系人
- +(NSMutableArray*)LetterSortArray:(NSArray*)stringArr
- {
- NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr];
- NSMutableArray *LetterResult = [NSMutableArray array];
- NSMutableArray *item = [NSMutableArray array];
- NSString *tempString;
- //拼音分组
- for (NSString* object in tempArray) {
-
- NSString *pinyin = [((JXChatChineseString*)object).pinYin substringToIndex:1];
- NSString *string = ((JXChatChineseString*)object).string;
- memberData *model = ((JXChatChineseString*)object).dataM;
- NSDictionary *dict = @{@"title":string,@"model":model};
- //不同
- if(![tempString isEqualToString:pinyin])
- {
- //分组
- item = [NSMutableArray array];
- [item addObject:dict];
- [LetterResult addObject:item];
- //遍历
- tempString = pinyin;
- }else//相同
- {
- [item addObject:dict];
- }
- }
- return LetterResult;
- }
- +(NSMutableArray*)ReturnSortChineseArrar2:(NSArray*)stringArr
- {
- //获取字符串中文字的拼音首字母并与字符串共同存放
- NSMutableArray *chineseStringsArray=[NSMutableArray array];
- for(int i=0;i<[stringArr count];i++)
- {
- JXChatChineseString *chineseString = [[JXChatChineseString alloc]init];
- chineseString.string = [NSString stringWithString:[stringArr objectAtIndex:i]];
-
- //chineseString.string = [NSString stringWithFormat:@"%@",dict.userNickName];
-
- //chineseString.dataM = [stringArr objectAtIndex:i];
-
- if(chineseString.string == nil){
- chineseString.string = @"";
- }
- //去除两端空格和回车
- chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
-
- //这里我自己写了一个递归过滤指定字符串 RemoveSpecialCharacter
- chineseString.string = [JXChatChineseString RemoveSpecialCharacter:chineseString.string];
- // NSLog(@"string====%@",chineseString.string);
-
- //判断首字符是否为字母
- NSString *regex = @"[A-Za-z]+";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
- NSString *initialStr = [chineseString.string length]?[chineseString.string substringToIndex:1]:@"";
-
- if ([predicate evaluateWithObject:initialStr])
- {
- NSLog(@"chineseString.string== %@",chineseString.string);
- //首字母大写
- chineseString.pinYin = [chineseString.string capitalizedString] ;
- }else{
- if(![chineseString.string isEqualToString:@""]){
- NSString *pinYinResult = [NSString string];
- for(int j=0;j<chineseString.string.length;j++){
- NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c",
- pinyinFirstLetterXXX([chineseString.string characterAtIndex:j])]uppercaseString];
- // NSLog(@"singlePinyinLetter ==%@",singlePinyinLetter);
-
- pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter];
- }
- chineseString.pinYin = pinYinResult;
- }else{
- chineseString.pinYin = @"";
- }
- }
- //NSDictionary *dictData= @{@"nickName":chineseString,@"dataArr": chineseString.dataM};
-
-
- [chineseStringsArray addObject:chineseString];
- }
- //按照拼音首字母对这些Strings进行排序
- NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];
- [chineseStringsArray sortUsingDescriptors:sortDescriptors];
-
- // for(int i=0;i<[chineseStringsArray count];i++){
- // NSLog(@"chineseStringsArray====%@",((ChineseString*)[chineseStringsArray objectAtIndex:i]).pinYin);
- // }
- NSLog(@"-----------------------------");
- return chineseStringsArray;
- }
- ///////////////////
- //
- //返回排序好的字符拼音
- //
- ///////////////////
- +(NSMutableArray*)ReturnSortChineseArrar:(NSArray*)stringArr
- {
- //获取字符串中文字的拼音首字母并与字符串共同存放
- NSMutableArray *chineseStringsArray=[NSMutableArray array];
- for(int i=0;i<[stringArr count];i++)
- {
- JXChatChineseString *chineseString = [[JXChatChineseString alloc]init];
- //chineseString.string = [NSString stringWithString:[stringArr objectAtIndex:i]];
- memberData *dict=[stringArr objectAtIndex:i];
- chineseString.string = [NSString stringWithFormat:@"%@",dict.userNickName];
-
- chineseString.dataM = [stringArr objectAtIndex:i];
-
- if(chineseString.string == nil){
- chineseString.string = @"";
- }
- //去除两端空格和回车
- chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
-
- //这里我自己写了一个递归过滤指定字符串 RemoveSpecialCharacter
- chineseString.string = [JXChatChineseString RemoveSpecialCharacter:chineseString.string];
- // NSLog(@"string====%@",chineseString.string);
-
- //判断首字符是否为字母
- NSString *regex = @"[A-Za-z]+";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
- NSString *initialStr = [chineseString.string length]?[chineseString.string substringToIndex:1]:@"";
-
- if ([predicate evaluateWithObject:initialStr])
- {
- NSLog(@"chineseString.string== %@",chineseString.string);
- //首字母大写
- chineseString.pinYin = [chineseString.string capitalizedString] ;
- }else{
- if(![chineseString.string isEqualToString:@""]){
- NSString *pinYinResult = [NSString string];
- for(int j=0;j<chineseString.string.length;j++){
- NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c",
- pinyinFirstLetterXXX([chineseString.string characterAtIndex:j])]uppercaseString];
- // NSLog(@"singlePinyinLetter ==%@",singlePinyinLetter);
-
- pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter];
- }
- chineseString.pinYin = pinYinResult;
- }else{
- chineseString.pinYin = @"";
- }
- }
- //NSDictionary *dictData= @{@"nickName":chineseString,@"dataArr": chineseString.dataM};
-
-
- [chineseStringsArray addObject:chineseString];
- }
- //按照拼音首字母对这些Strings进行排序
- NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];
- [chineseStringsArray sortUsingDescriptors:sortDescriptors];
-
- // for(int i=0;i<[chineseStringsArray count];i++){
- // NSLog(@"chineseStringsArray====%@",((ChineseString*)[chineseStringsArray objectAtIndex:i]).pinYin);
- // }
- NSLog(@"-----------------------------");
- return chineseStringsArray;
- }
- #pragma mark - 返回一组字母排序数组
- +(NSMutableArray*)SortArray:(NSArray*)stringArr
- {
- NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr];
- //把排序好的内容从ChineseString类中提取出来
- NSMutableArray *result = [NSMutableArray array];
- for(int i=0;i<[stringArr count];i++){
- [result addObject:((JXChatChineseString*)[tempArray objectAtIndex:i]).string];
- NSLog(@"SortArray----->%@",((JXChatChineseString*)[tempArray objectAtIndex:i]).string);
- }
- return result;
- }
- //过滤指定字符串 里面的指定字符根据自己的需要添加 过滤特殊字符
- +(NSString*)RemoveSpecialCharacter: (NSString *)str {
- NSRange urgentRange = [str rangeOfCharacterFromSet: [NSCharacterSet characterSetWithCharactersInString: @",.?、 ~¥#&<>《》()[]{}【】^@/£¤|§¨「」『』¢¬ ̄~@#&*()——+|《》$_€"]];
- if (urgentRange.location != NSNotFound)
- {
- return [self RemoveSpecialCharacter:[str stringByReplacingCharactersInRange:urgentRange withString:@""]];
- }
- return str;
- }
- @end
|