您的位置:首页 > 移动开发 > IOS开发

iOS开发:通讯录之复杂文本字符串解析

2015-09-08 19:53 337 查看
iOS开发:通讯录之复杂文本字符串解析

从一个txt文件中解析相关信息:

例如:要求将姓名、性别、QQ号、电话号码解析出来:




分析:最外层应该是一个字典,里面的key应该是首字母,value值就首字母对应的名字数组;

例如: { S --------->[宋江/ 孙二娘] },这就是字典里的一对key--value键值对。

- (void)getData{
所以先得建立一个字典(定义成属性)
!!!字典和数组在使用之前必须要初始化,要不然用不了,一直是nil的。
_dataDic = [NSMutableDictionary dictionary];

_sectionArray = [NSMutableArray array];//这个sectionArray数组是用来放所有的key值(即所有的首字母)
首先获得这个文件路径
NSString *path = @"/Users/dllo/Desktop/作业/UI作业/contact.txt";
NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
将字符串转化成数组(每一行“\n”是一个数组元素)
NSArray *array = [string componentsSeparatedByString:@"\n"];
for (NSString *str in array) {
再将每个数组元素(字符串遍历)以“ ”分割
NSArray *arr = [str componentsSeparatedByString:@" "];
建立一个学生类,初始化一个对象并接收以“ ”分割的数组各部分



Student *stu = [[Student alloc]init];
stu.firstLetter = arr[0];
stu.name = arr[1];
stu.gender = arr[2];
stu.qqNumber = arr[3];
stu.phoneNumber = arr[4];
然后将所有的信息添加到这个字典里:
(1)、 先判断key数组(_sectionArray)里是否含有这个key(首字母)
if (![_sectionArray containsObject:arr[0]]) {
没有,就讲这个首字母添加到_sectionArray数组中
[_sectionArray addObject:arr[0]]; //这样所有的key(首字母)就添加完了(全部添加到_sectionArray里了)
}
(2)、//接着判断每一个key(首字母)对应的value数组是否存在
if (![_dataDic objectForKey:arr[0]]) {
不存在,建立一个对应的value数组,并将这个学生对象添加进去
NSMutableArray *valueArray = [NSMutableArray arrayWithObject:stu];
添加到字典里(新建的valueArray与对应的首字母应该是字典里的一对新键值对,所以要放到字典里)
[_dataDic setValue:valueArray forKey:arr[0]];
}else{
找到key对应的value数组,并添加学生信息
[[_dataDic objectForKey:arr[0]] addObject:stu];
}
因为字典是无序的,所以对_sectionArray数组进行一次排序
[_sectionArray sortUsingSelector:@selector(compare:)];
}

NSLog(@"%@", _dataDic);

}
运行结果如下每个首字母对应一个数组(里面是对应首字母的名字):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: