iOS通讯录联系人列表较完整(中文排序)
来源:互联网 发布:java递归输出二叉树 编辑:程序博客网 时间:2024/04/29 22:26
代码已上传GitHub https://github.com/6357/YUChineseSorting.git
参考http://www.cnblogs.com/syxchina/archive/2012/10/11/2720257.html
一、需要导入头文件pinyin.h这里有下载地址http://download.csdn.net/detail/u013873967/6991579
这是我写的完整代码,欢迎大家学习交流,帮我改进。http://download.csdn.net/detail/u013873967/6992825
二、ChineseString.h
1
2
3
4
5
6
7
8
9
10
11
12
#import <Foundation/Foundation.h>
#import "pinyin.h"
@interface ChineseString : NSObject
@property(retain,nonatomic)NSString *string;
@property(retain,nonatomic)NSString *pinYin;
//----- 返回tableview右方indexArray
+(NSMutableArray*)IndexArray:(NSArray*)stringArr;
//----- 返回联系人
+(NSMutableArray*)LetterSortArray:(NSArray*)stringArr;
三、ChineseString.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#import "ChineseString.h"
@implementation ChineseString
@synthesize string;
@synthesize pinYin;
#pragma mark - 返回tableview右方 indexArray
+(NSMutableArray*)IndexArray:(NSArray*)stringArr
{
NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr];
NSMutableArray *A_Result=[NSMutableArray array];
NSString *tempString ;
for
(NSString* object in tempArray)
{
NSString *pinyin = [((ChineseString*)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 = [((ChineseString*)object).pinYin substringToIndex:1];
NSString *string = ((ChineseString*)object).string;
//不同
if
(![tempString isEqualToString:pinyin])
{
//分组
item = [NSMutableArray array];
[item addObject:string];
[LetterResult addObject:item];
//遍历
tempString = pinyin;
}
else
//相同
{
[item addObject:string];
}
}
return
LetterResult;
}
//过滤指定字符串 里面的指定字符根据自己的需要添加
+(NSString*)RemoveSpecialCharacter: (NSString *)str {
NSRange urgentRange = [str rangeOfCharacterFromSet: [NSCharacterSet characterSetWithCharactersInString: @
",.?、 ~¥#&<>《》()[]{}【】^@/£¤|§¨「」『』¢¬ ̄~@#&*()——+|《》$_€"
]];
if
(urgentRange.location != NSNotFound)
{
return
[self RemoveSpecialCharacter:[str stringByReplacingCharactersInRange:urgentRange withString:@
""
]];
}
return
str;
}
///////////////////
//
//返回排序好的字符拼音
//
///////////////////
+(NSMutableArray*)ReturnSortChineseArrar:(NSArray*)stringArr
{
//获取字符串中文字的拼音首字母并与字符串共同存放
NSMutableArray *chineseStringsArray=[NSMutableArray array];
for
(
int
i=0;i<[stringArr count];i++)
{
ChineseString *chineseString=[[ChineseString alloc]init];
chineseString.string=[NSString stringWithString:[stringArr objectAtIndex:i]];
if
(chineseString.string==nil){
chineseString.string=@
""
;
}
//去除两端空格和回车
chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
//此方法存在一些问题 有些字符过滤不了
//NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""];
//chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:set];
//这里我自己写了一个递归过滤指定字符串 RemoveSpecialCharacter
chineseString.string =[ChineseString RemoveSpecialCharacter:chineseString.string];
// NSLog(@"string====%@",chineseString.string);
//判断首字符是否为字母
NSString *regex = @
"[A-Za-z]+"
;
NSPredicate*predicate = [NSPredicate predicateWithFormat:@
"SELF MATCHES %@"
,regex];
if
([predicate evaluateWithObject: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"
,pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];
}
chineseString.pinYin=pinYinResult;
}
else
{
chineseString.pinYin=@
""
;
}
}
[chineseStringsArray addObject:chineseString];
}
//按照拼音首字母对这些Strings进行排序
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@
"pinYin"
ascending:YES]];
[chineseStringsArray sortUsingDescriptors:sortDescriptors];
return
chineseStringsArray;
}
四、UITableViewController.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (
void
)viewDidLoad
{
self.title = @
"我的好友"
;
[super viewDidLoad];
NSArray *stringsToSort=[NSArray arrayWithObjects:
@
"¥hhh, .$"
,@
" ¥Chin ese "
,@
"开源中国 "
,@
"www.oschina.net"
,
@
"开源技术"
,@
"社区"
,@
"开发者"
,@
"传播"
,
@
"2013"
,@
"100"
,@
"中国"
,@
"暑假作业"
,
@
"键盘"
, @
"鼠标"
,@
"hello"
,@
"world"
,
nil];
self.indexArray = [ChineseString IndexArray:stringsToSort];
self.LetterResultArr = [ChineseString LetterSortArray:stringsToSort];
}
0 0
- iOS通讯录联系人列表较完整(中文排序)
- ios开发中,联系人列表是怎样通过名字排序分组的(支持中文排序)
- 通讯录联系人姓名排序
- ios 操作通讯录联系人
- iOS 之通讯录联系人
- iOS中获取本地通讯录联系人以及汉字首字母排序
- 完整的经Android真机得到通讯录联系人列表的技术解决方案
- 仿IOS通讯录效果,实现获取手机通讯录、字母排序显示、搜索联系人、拨打电话
- iOS 中文首字母排序,通讯录排序,好友分组排序
- iOS 中文首字母排序,通讯录排序,好友分组排序
- iOS 获取通讯录联系人信息
- iOS 通讯录-获取联系人属性
- iOS 通讯录-获取联系人属性
- iOS 获取通讯录联系人信息
- iOS获取通讯录联系人信息
- iOS获取通讯录联系人信息
- iOS获取通讯录联系人信息
- iOS获取通讯录联系人信息
- 搜索引擎-倒排索引基础知识
- Mule HTTP组件监听及请求
- php处理http post/get请求
- 二叉树遍历
- 设置读取SD卡权限的问题
- iOS通讯录联系人列表较完整(中文排序)
- DataStructure-6-树
- note20150804
- Android开发之资源文件存储
- android sdk manager更新出错
- 使用servlet/jsp + mysql 完成的一个bbs练习项目 记录下来
- SIP穿越NAT的rport机制
- 【CJWYH】RHL的背包题解(多重背包)
- TF-IDF与余弦相似性的应用(一):自动提取关键词