zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/MrWuYindi/p/5146604.html
Copyright © 2011-2022 走看看