iOS常用技术-微博字符串的截取

 1 //
 2 //  NSString+Range.h
 3 //  字符串作业
 4 //
 5 //  Created by andezhou on 15/12/17.
 6 //  Copyright © 2015年 周安德. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface NSString (Range)
12 
13 // 截取话题##
14 - (NSArray *)queryTopicFromString:(NSString *)topic;
15 
16 // 截取表情符号[\]
17 - (NSArray *)querySmiliesFromString:(NSString *)fromStr
18                          toStr:(NSString *)toStr;
19 
20 // 截取@name
21 - (NSArray *)queryName;
22 
23 @end

/*************************************************/

 1 //
 2 //  NSString+Range.m
 3 //  字符串作业
 4 //
 5 //  Created by andezhou on 15/12/17.
 6 //  Copyright © 2015年 周安德. All rights reserved.
 7 //
 8 
 9 #import "NSString+Range.h"
10 
11 @implementation NSString (Range)
12 
13 // 截取话题##
14 - (NSArray *)queryTopicFromString:(NSString *)topic
15 {
16     // 初始化一个存放range的数组
17     NSMutableArray *array = [NSMutableArray array];
18     return [self queryStringFrom:topic to:topic array:array];
19 }
20 
21 // 截取表情符号[\]
22 - (NSArray *)querySmiliesFromString:(NSString *)fromStr
23                          toStr:(NSString *)toStr
24 {
25     NSMutableArray *array = [NSMutableArray array];
26     return [self queryStringFrom:fromStr to:toStr array:array];
27 }
28 
29 // 截取@name
30 - (NSArray *)queryName
31 {
32     NSMutableArray *array = [NSMutableArray array];
33     return [self queryStringFrom:@"@" to:@" " array:array];
34 }
35 
36 - (NSArray *)queryStringFrom:(NSString *)from to:(NSString *)to array:(NSMutableArray *)array
37 {
38     // 获取开始#所在的位置
39     NSRange fromRange = [self rangeOfString:from];
40     
41     if (fromRange.location != NSNotFound) {
42         // 获取开始索引
43         NSUInteger fromIndex = fromRange.location + fromRange.length;
44         // 从索引开始截取字符串
45         NSString *fromStr = [self substringFromIndex:fromIndex];
46         
47     
48         // 获取与#所对应的#的位置
49         NSRange toRange = [fromStr rangeOfString:to];
50         
51         // 判断所对应的#是否存在
52         if (toRange.location != NSNotFound) {
53             // 得到##之间的标题
54             NSString *str = [fromStr substringToIndex:toRange.location];
55             // 得到完整的标题字符串,如#大学是所整容院#
56             NSString *string = [NSString stringWithFormat:@"%@%@%@", from, str, to];
57             NSLog(@"string:%@", string);
58 
59             // 得到完成的标题字符串在字符串中的位置
60             NSRange range = [self rangeOfString:string];
61             
62             // 先判断上一个是否存在
63             NSValue *value = [array lastObject];
64             if (value.rangeValue.length) {
65                 // 当前话题的range中的位置添加上上一个话题的range的位置和长度
66                 NSUInteger location = value.rangeValue.length + value.rangeValue.location;
67                 range = NSMakeRange(range.location + location, range.length);
68             }
69             
70             // 把range转化为NSValue存放在数组中
71             [array addObject:[NSValue valueWithRange:range]];
72 
73             // 获取标题##后面的内容
74             NSString *nextStr = [fromStr substringFromIndex:toRange.location + toRange.length];
75             
76             // 递归继续查询
77             [nextStr queryStringFrom:from to:to array:array];
78         }
79     }
80     
81     return array;
82 }
83 
84 @end

/*******************************************************************/

 1 //
 2 //  ViewController.m
 3 //  作业
 4 //
 5 //  Created by andezhou on 16/1/4.
 6 //  Copyright (c) 2016年 周安德. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 #import "NSString+Range.h"
11 
12 @interface ViewController ()
13 
14 @end
15 
16 @implementation ViewController
17 
18 - (void)viewDidLoad {
19     [super viewDidLoad];
20     NSString *str = @"哈哈#大学是所整容院# 岁月是把杀猪刀还是整容刀[/尴尬],最近网友纷纷/晒出自己大学前后的对比照,简直集体整容的节奏[/开心]。@球球 你说对不对呢?[/阴险] #开心一刻# @小明 #你会不会# 啊 我不会啊。";
21     
22     
23     NSArray *topicArray = [str queryTopicFromString:@"#"];
24     NSArray *nameArray = [topicArray arrayByAddingObjectsFromArray:[str queryName]];
25     NSArray *smilieArray = [nameArray arrayByAddingObjectsFromArray:[str querySmiliesFromString:@"[/" toStr:@"]"]];
26     
27     NSMutableAttributedString *mutString = [[NSMutableAttributedString alloc] initWithString:str];
28     // 给添加颜色
29     for (NSValue *value in smilieArray) {
30         NSRange range = value.rangeValue;
31         [mutString addAttributes:@{
32                                    NSForegroundColorAttributeName : [UIColor blueColor]
33                                    }
34                            range:range];
35     }
36     
37     UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 0, 0)];
38     lab.numberOfLines = 0;
39     lab.attributedText = mutString;
40     CGSize size = [lab sizeThatFits:CGSizeMake(self.view.frame.size.width - 20, MAXFLOAT)];
41     lab.frame = CGRectMake(10, 100, size.width, size.height);
42     [self.view addSubview:lab];
43     
44     // Do any additional setup after loading the view, typically from a nib.
45 }
46 
47 - (void)didReceiveMemoryWarning {
48     [super didReceiveMemoryWarning];
49     // Dispose of any resources that can be recreated.
50 }
51 
52 @end

 

/**********************************************************************/

posted @ 2016-01-20 21:20  MrWuYindi  阅读(213)  评论(0编辑  收藏  举报