Beyond平君

导航

OC-获取城市首字母

题目:解析根据文件里面的内容,读入一个城市,输出所在首字母
比如读入 长春 输出 c
读入 北京 输出 b

从如下文件解析

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 3 <plist version="1.0">
 4 <dict>
 5     <key>a</key>
 6     <array>
 7         <string>安吉</string>
 8         <string>安庆</string>
 9         <string>鞍山</string>
10         <string>澳门</string>
11     </array>
12     <key>b</key>
13     <array>
14         <string>保定</string>
15         <string>宝鸡</string>
16         <string>包头</string>
17         <string>北海</string>
18         <string>北京</string>
19         <string>蚌埠</string>
20         <string>滨州</string>
21     </array>
22     <key>c</key>
23     <array>
24         <string>沧州</string>
25         <string>长春</string>
26         <string>常德</string>
27         <string>长乐</string>
28         <string>长沙</string>
29         <string>常熟</string>
30         <string>常州</string>
31         <string>潮阳</string>
32         <string>潮州</string>
33         <string>承德</string>
34         <string>成都</string>
35         <string>郴州</string>
36         <string>重庆</string>
37         <string>滁州</string>
38         <string>慈禧</string>
39         <string>从化</string>
40     </array>
41 </dict>
42 </plist>
View Code

本次思路

1.创建一个首字母和城市名称的一个类FirstLetterAndCity,其中有两个成员变量,一个位字符串类型,存储首字母,一个动态数组,存储该字母对应的所有城市。

 1 //
 2 //  FirstLetterAndCity.h
 3 //  day16_OC5_城市首字母
 4 //
 5 //  Created by qianfeng on 15/6/15.
 6 //  Copyright (c) 2015年 QF_Lpj. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface FirstLetterAndCity : NSObject
12 {
13     NSString *_firstLetter;  //城市首字母
14     NSMutableArray *_cityList; //城市集合
15 }
16 - (id)init;
17 
18 //设置城市首字母
19 - (void)setFirstLetter:(NSString *)firstLetter;
20 - (NSString *)firstLetter;
21 
22 //首字母和城市类的城市列表中添加城市
23 - (void)addCityList:(NSString *)cityName;
24 - (NSMutableArray *)cityList;
25 
26 
27 @end
28 ------------------------------
29 //
30 //  FirstLetterAndCity.m
31 //  day16_OC5_城市首字母
32 //
33 //  Created by qianfeng on 15/6/15.
34 //  Copyright (c) 2015年 QF_Lpj. All rights reserved.
35 //
36 
37 #import "FirstLetterAndCity.h"
38 
39 @implementation FirstLetterAndCity
40 
41 - (id)init
42 {
43     if (self = [super init]) {
44         _firstLetter = @"";
45         _cityList = [[NSMutableArray alloc] init];
46     }
47     return self;
48 }
49 
50 //设置城市首字母
51 - (void)setFirstLetter:(NSString *)firstLetter
52 {
53     _firstLetter = firstLetter;
54 }
55 - (NSString *)firstLetter
56 {
57     return _firstLetter;
58 }
59 
60 //首字母和城市类的城市列表中添加城市
61 - (void)addCityList:(NSString *)cityName
62 {
63     if (![cityName isEqualToString:@""]) {
64         [self ->_cityList addObject:cityName];
65     }
66 }
67 - (NSMutableArray *)cityList
68 {
69     return _cityList;
70 }
71 
72 
73 @end

2.创建一个城市管理类,其中有一个动态数组的成员变量,用于存储所有FirstLetterAndCity类对象。

之后通过遍历管理类中的数组,对每一个FirstLetterAndCity对象中的数组再意义遍历,当对应的城市名称在其中有时,就返回该对象对应的城市首字母

  1 //
  2 //  ManagerCity.h
  3 //  day16_OC5_城市首字母
  4 //
  5 //  Created by qianfeng on 15/6/15.
  6 //  Copyright (c) 2015年 QF_Lpj. All rights reserved.
  7 //
  8 
  9 #import <Foundation/Foundation.h>
 10 #import "FirstLetterAndCity.h"
 11 
 12 #define FilePath @"/Users/qianfeng/Desktop/day16_OC5_复合类设计/day16_OC5_城市首字母/城市首字母.txt"
 13 
 14 @interface ManagerCity : NSObject
 15 {
 16     NSMutableArray *_firstLetterAndCityList;  //用于存储城市集合和首字母  FirstLetterAndCity 对象
 17 }
 18 
 19 - (id)init;
 20 
 21 - (NSString *)getFileAllString:(NSString *)filePath;
 22 
 23 //输入一个城市名称,返回对应的首字母
 24 - (NSString *)getFirstLetterByCityName:(NSString *)cityName;
 25 
 26 
 27 + (void)testManagerCity:(NSString *)cityName;
 28 
 29 
 30 
 31 @end
 32 
 33 ---------------------------------------------------
 34 //
 35 //  ManagerCity.m
 36 //  day16_OC5_城市首字母
 37 //
 38 //  Created by qianfeng on 15/6/15.
 39 //  Copyright (c) 2015年 QF_Lpj. All rights reserved.
 40 //
 41 
 42 #import "ManagerCity.h"
 43 #import "FirstLetterAndCity.h"
 44 
 45 //声明一个匿名类别 实现私有化    
 46 @interface ManagerCity ()
 47 
 48 - (NSString *)getFLetterByCityName:(NSString *)cityName;
 49 
 50 @end
 51 
 52 @implementation ManagerCity
 53 
 54 - (id)init
 55 {
 56     if (self = [super init]) {
 57         _firstLetterAndCityList = [[NSMutableArray alloc] init];
 58     }
 59     return self;
 60 }
 61 
 62 //由路径生成一个字符串对象
 63 - (NSString *)getFileAllString:(NSString *)filePath
 64 {
 65     NSString *fileContent = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
 66     return fileContent;
 67 }
 68 
 69 //通过城市名称获取城市首字母
 70 - (NSString *)getFirstLetterByCityName:(NSString *)cityName
 71 {
 72     NSString *fileContent = [self getFileAllString:FilePath];
 73     NSArray *fileContentArray = [fileContent componentsSeparatedByString:@"\n"];
 74     //首字母 城市名类
 75     FirstLetterAndCity *letterCity;
 76     if (fileContentArray) {
 77         for (NSString *item in fileContentArray) {
 78             if ([item isEqualToString:@""]) {
 79                 continue;
 80             }
 81             else if([item containsString:@"<key>"])
 82             {
 83                 letterCity = [[FirstLetterAndCity alloc] init];
 84                 //<key>x</key> 获取'x'前后的位置坐标,由此获取到x
 85                 NSRange rangeRight = [item rangeOfString:@">"];
 86                 NSRange rangeLeft = [item rangeOfString:@"</"];
 87                 [letterCity setFirstLetter:[item substringWithRange:NSMakeRange(rangeRight.location+1, rangeLeft.location-rangeRight.location-1)]];
 88                 
 89             }else if([item containsString:@"<string>"])
 90             {
 91                 //获取"<string>XX</string>"  XX之间的位置,并且由此获得对应的城市
 92                 NSRange rangeRight = [item rangeOfString:@">"];
 93                 NSRange rangeLeft = [item rangeOfString:@"</"];
 94                 [letterCity addCityList:[item substringWithRange:NSMakeRange(rangeRight.location+1, rangeLeft.location-rangeRight.location-1)]];
 95             }
 96             //只有当碰到"</array>"时才说明走完了一个key 和 一列 string
 97             if (letterCity && [item containsString:@"</array>"]) {
 98                 [self->_firstLetterAndCityList addObject:letterCity];
 99             }
100         }
101     }
102     
103     NSString *firstLetter = [self getFLetterByCityName:cityName];
104     
105     
106     return firstLetter;
107 }
108 
109 //当获取 _firstLetterAndCityList 列表时候,通过传入的城市名字获取到对应的城市首字母
110 - (NSString *)getFLetterByCityName:(NSString *)cityName
111 {
112     //FirstLetterAndCity *flCity = [[FirstLetterAndCity alloc] init];
113     for (FirstLetterAndCity *flCity in self->_firstLetterAndCityList) {
114         for (NSString *item in [flCity cityList]) {
115             if ([item isEqualToString:cityName]) {
116                 return [flCity firstLetter];
117             }
118         }
119     }
120     return @"NotFound";
121 }
122 
123 
124 + (void)testManagerCity:(NSString *)cityName
125 {
126     ManagerCity *mCity = [[ManagerCity alloc] init];
127     NSString *firstLetter = [mCity getFirstLetterByCityName:cityName];
128     if (![firstLetter isEqualToString:@"NotFound"]) {
129         NSLog(@"%@",firstLetter);
130     }else{
131         NSLog(@"没有%@城市的首字母",cityName);
132     }
133 }
134 @end

 

posted on 2015-06-15 20:46  Beyond平君  阅读(408)  评论(0编辑  收藏  举报