美文网首页
格式化输出字符串

格式化输出字符串

作者: TByounger | 来源:发表于2018-03-12 16:34 被阅读0次

1. 新建一类(CustomStringFormatter),在h文件中添加方法:

/**

 按指定格式和分隔符号输出内容

 @param content 待处理的内容

 @param arrayFormat 比如电话号码3-4-3显示

 @param sep 分隔符号 ,比如- or 空格

 @return 包括了分隔符号的字符串

 */

- (NSString*)gotFormatterResultViaInputContent:(NSString*)content sepArray:(NSArray *)arrayFormat sepString:(NSString*)sep;

2. 具体实现如下:

@interface CustomStringFormatter()

/** 存放按指定格式分隔后的中间值 */

@property (nonatomic, strong) NSMutableDictionary *dic_result;

/** 按指定格式arrayFormat创建的数组,用于dic_result的key,防止arrayFormat里有重复的值比如处理3-4-4这样的情况 */

@property (nonatomic, strong) NSArray *array_keys;

@property (nonatomic, strong) NSArray *array_format;

@property (nonatomic, copy) NSString *str_sep;

@end

@implementation CustomStringFormatter

- (NSString*)gotFormatterResultViaInputContent:(NSString*)content sepArray:(NSArray *)arrayFormat sepString:(NSString*)sep {

    self.str_sep= sep;

    self.array_format= arrayFormat;

    [self zzjrp_recursionContent:content sepArray:arrayFormat keyArray:self.array_keys];

    NSLog(@"中间值:%@",self.dic_result);

    if(self.dic_result.count>0) {

        return [self zzjrp_combineWithKeyArray:self.array_keys];

    }

    return @"";

}

#pragma mark - 处理第一步

/** 分为二个方法处理,第一为构造中间结果,也就是dic_result */

- (void)zzjrp_recursionContent:(NSString*)inputContent sepArray:(NSArray *)arrayFormat keyArray:(NSArray *)arrayKey {

    //显示和逻辑分离,对inputContent做去分隔符处理,获取真正要处理的字符

    NSString *str_content = [inputContent stringByReplacingOccurrencesOfString:self.str_sep withString:@""];

    if(str_content.length==0) {

        //无论是真正还没开始输入,还是用户按了键盘上的删除键,这儿都会拦截到,处理方式是一样的

        [self.dic_result removeAllObjects];

        return;

    }

    /*****======在输入了或按了键盘上的删除键后仍然有值的情况下才开始真正的处理======****/

    //第一个值应有的长度 && 第一个key值的获取

    NSString*str_firstValue = [arrayFormatfirstObject];

    NSString*str_key = [arrayKeyfirstObject];

    if(str_content.length<= str_firstValue.integerValue) {//输入长度小于等于第一个分隔数值时,直接原样保存

        [self.dic_resultsetObject:str_contentforKey:str_key];

        //解决退格键引起的值的变化

        for(inti =0; i < arrayKey.count; i ++) {

            NSString*tmp = arrayKey[i];

            if(![str_keyisEqualToString:tmp]) {

                [self.dic_resultremoveObjectForKey:tmp];

            }

        }

        return;

    }

    /*****======输入长度大于第一个分隔数值时,取剩下部分做递归======****/

    //创建递归数据源

    NSMutableArray*array = arrayFormat.mutableCopy;

    [arrayremoveObjectAtIndex:0];

    NSMutableArray*array2 = arrayKey.mutableCopy;

    [array2removeObjectAtIndex:0];

    if(array.count==0) {

        return;

    }

    //剩下的输入的内容

    NSString*str_rest = [str_contentsubstringFromIndex:str_firstValue.integerValue];

    if(str_rest) {

        //递归

        [self zzjrp_recursionContent:str_rest sepArray:array keyArray:array2];

    }

}

#pragma mark - 处理第二步

/** 分为二个方法处理,第二为构造最终结果,也就是包括了分隔符号的字符串 */

- (NSString*)zzjrp_combineWithKeyArray:(NSArray *)arrayKey {

    NSMutableString *str_space = [NSMutableString string];

    for(inti =0; i < arrayKey.count; i ++) {

        NSString*str_key = arrayKey[i];

        NSString*str_input = [self.dic_resultobjectForKey:str_key];

        if(str_input) {

            [str_spaceappendFormat:@"%@%@",str_input,self.str_sep];

        }

    }

    //如果最后一位有分隔符,去掉

    NSString*str_last = [str_spacesubstringFromIndex:str_space.length-1];

    if([str_lastisEqualToString:self.str_sep]) {

        return[str_spacesubstringToIndex:str_space.length-1];

    }

    returnstr_space;

}

#pragma mark - Setter methos

- (NSMutableDictionary *)dic_result {

    if (!_dic_result) {

        _dic_result = [NSMutableDictionary dictionary];

    }

    return _dic_result;

}

- (NSArray*)array_keys {

    if (!_array_keys) {

        NSMutableArray*array_tmp =@[].mutableCopy;

        for(inti =10; i

            [array_tmpaddObject:[NSStringstringWithFormat:@"%d",i]];

        }

        _array_keys= array_tmp;

    }

    return _array_keys;

}

相关文章

  • 简单的宏定义(不定期补充)

    控制台输出 RGB色值 格式化字符串 格式化字符串 输出点、坐标、Rect 格式化数字

  • python3学习笔记(一)

    1、字符串替换输出: 2、字符串格式化输出: 3、字符串切片

  • 基础知识 - Golang 中的格式化输入输出

    【格式化输出】 // 格式化输出:将 arg 列表中的 arg 转换为字符串输出 // 使用动词 v 格式化 ar...

  • Golang 中的格式化输入输出

    【格式化输出】 // 格式化输出:将 arg 列表中的 arg 转换为字符串输出 // 使用动词 v 格式化 ar...

  • Yezi.CMS 标签说明文档

    date(format) 输出当前日期,或使用指定的格式化字符串格式化输出。 参数解析: format 字符串,可...

  • 输出

    目标 格式化输出格式化符号f-字符串 print的结束符 输出 作用:程序输出内容给用户 一. 格式化输出 所谓...

  • c语言

    获取时间 & 格式化输出到字符串

  • python的字符串

    一、字符串的输入和输出   输出字符串可以直接使用print输出,也可以通过格式化输出%s进行输出。 示例: 输出...

  • 03 常用技巧介绍-(格式化、编码、while else、运算符

    1 格式化输出 % 在字符串里的占位符;%s:字符串占位符%d:数字占位符;%%:格式化输出中表示单纯的% %(p...

  • Day02

    类型转换 字符串的操作 格式化输出 使用%格式化,若想输出%,则使用另一个%转义 format格式化 列表 增 a...

网友评论

      本文标题:格式化输出字符串

      本文链接:https://www.haomeiwen.com/subject/hdznfftx.html