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

来源:互联网 发布:vb.net能用的报表插件 编辑:程序博客网 时间:2024/06/06 05:21

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);


}

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



0 0
原创粉丝点击