格式化輸出字符串

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

/**

?按指定格式和分隔符號(hào)輸出內(nèi)容

?@param content 待處理的內(nèi)容

?@param arrayFormat 比如電話號(hào)碼3-4-3顯示

?@param sep 分隔符號(hào) ,比如- or 空格

?@return 包括了分隔符號(hào)的字符串

?*/

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


2. 具體實(shí)現(xiàn)如下:

@interface CustomStringFormatter()

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

@property (nonatomic, strong) NSMutableDictionary *dic_result;

/** 按指定格式arrayFormat創(chuàng)建的數(shù)組敦锌,用于dic_result的key弥臼,防止arrayFormat里有重復(fù)的值比如處理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 - 處理第一步

/** 分為二個(gè)方法處理,第一為構(gòu)造中間結(jié)果靠胜,也就是dic_result */

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


? ? //顯示和邏輯分離因痛,對(duì)inputContent做去分隔符處理,獲取真正要處理的字符

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


? ? if(str_content.length==0) {


? ? ? ? //無論是真正還沒開始輸入胰苏,還是用戶按了鍵盤上的刪除鍵硕蛹,這兒都會(huì)攔截到,處理方式是一樣的

? ? ? ? [self.dic_result removeAllObjects];


? ? ? ? return;

? ? }


? ? /*****======在輸入了或按了鍵盤上的刪除鍵后仍然有值的情況下才開始真正的處理======****/


? ? //第一個(gè)值應(yīng)有的長度 && 第一個(gè)key值的獲取

? ? NSString*str_firstValue = [arrayFormatfirstObject];

? ? NSString*str_key = [arrayKeyfirstObject];


? ? if(str_content.length<= str_firstValue.integerValue) {//輸入長度小于等于第一個(gè)分隔數(shù)值時(shí),直接原樣保存


? ? ? ? [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;

? ? }


? ? /*****======輸入長度大于第一個(gè)分隔數(shù)值時(shí)硕并,取剩下部分做遞歸======****/

? ? //創(chuàng)建遞歸數(shù)據(jù)源

? ? NSMutableArray*array = arrayFormat.mutableCopy;

? ? [arrayremoveObjectAtIndex:0];


? ? NSMutableArray*array2 = arrayKey.mutableCopy;

? ? [array2removeObjectAtIndex:0];


? ? if(array.count==0) {


? ? ? ? return;

? ? }


? ? //剩下的輸入的內(nèi)容

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


? ? if(str_rest) {

? ? ? ? //遞歸

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

? ? }

}

#pragma mark - 處理第二步

/** 分為二個(gè)方法處理,第二為構(gòu)造最終結(jié)果法焰,也就是包括了分隔符號(hào)的字符串 */

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

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市倔毙,隨后出現(xiàn)的幾起案子埃仪,更是在濱河造成了極大的恐慌,老刑警劉巖陕赃,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卵蛉,死亡現(xiàn)場離奇詭異颁股,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)傻丝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門甘有,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人葡缰,你說我怎么就攤上這事梧疲。” “怎么了运准?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缭受。 經(jīng)常有香客問我胁澳,道長,這世上最難降的妖魔是什么米者? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任韭畸,我火速辦了婚禮,結(jié)果婚禮上夫壁,老公的妹妹穿的比我還像新娘灯抛。我一直安慰自己肢础,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布锦庸。 她就那樣靜靜地躺著,像睡著了一般蒲祈。 火紅的嫁衣襯著肌膚如雪甘萧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天梆掸,我揣著相機(jī)與錄音扬卷,去河邊找鬼。 笑死酸钦,一個(gè)胖子當(dāng)著我的面吹牛怪得,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卑硫,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徒恋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了欢伏?” 一聲冷哼從身側(cè)響起因谎,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颜懊,沒想到半個(gè)月后财岔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體风皿,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年匠璧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桐款。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夷恍,死狀恐怖魔眨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酿雪,我是刑警寧澤遏暴,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站指黎,受9級(jí)特大地震影響朋凉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醋安,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一杂彭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吓揪,春花似錦亲怠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叭首,卻和暖如春徙垫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背放棒。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工姻报, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人间螟。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓吴旋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厢破。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荣瑟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容