今天是我人生中第一個(gè)面試,到了那家公司,開始技術(shù)面的時(shí)候我全懵逼了,面試的具體題目我就不說了,大概意思就是讓我將一段字符串中的中英文分割出來,再分別對(duì)中英文添加屬性樣式,要在一個(gè)UILabel中分成兩行顯示.
最后因?yàn)楸扇藢W(xué)藝不精,當(dāng)然被......
這道題目呢本質(zhì)上來講并不是很難,不過為了講的詳細(xì)一些,我會(huì)分解成兩個(gè)步驟來講,每個(gè)步驟我會(huì)分別寫一篇文章來解釋
1.將字符串的中英文分割
2.對(duì)分割出來的字符串添加屬性樣式
那如何在一個(gè)字符串中分割中英文呢?
我第一個(gè)想到的就是正則表達(dá)式,但是我并不會(huì)正則......
好吧,不會(huì)正則表達(dá)式?jīng)]關(guān)系,這種東西網(wǎng)上一大堆,我們只要知道怎么去使用就行了
其實(shí)iOS給我們提供了很多方便的類提供給我們使用,現(xiàn)在我要用到正則我就發(fā)現(xiàn)了iOS中還有一個(gè)NSRegularExpression類,這個(gè)類就可以用來處理正則表達(dá)式相關(guān)的操作
好了說了這么多廢話我就把我的代碼貼出來
封裝的方法
/**
* 利用正則表達(dá)式將字符串中的特定字符拼接起來并傳出
*
* @param string 傳入的字符串
* @param regularExpression 傳入的正則表達(dá)式
*
* @return 返回一個(gè)內(nèi)含所有符合條件的字符串
*/
- (NSString *)processWithString:(NSString *)string regularExpression:(NSString *)regularExpression {
// 創(chuàng)建一個(gè)可變字符串,用來拼接符合條件的字符
NSMutableString *mString = [[NSMutableString alloc] init];
// 創(chuàng)建一個(gè)錯(cuò)誤對(duì)象
NSError *error;
// 正則
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regularExpression options:0 error:&error];
// 如果正則沒有錯(cuò)誤進(jìn)行內(nèi)部的代碼
if (!error) {
// 將符合條件的字符位置記錄到數(shù)組中
NSArray *array = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
// 利用數(shù)組中的位置將所有符合條件的字符拼接起來
for (NSTextCheckingResult *result in array) {
NSRange range = [result range];
NSString *mStr = [string substringWithRange:range];
[mString appendString:mStr];
}
return mString;
} else {
NSLog(@"error is %@", error);
}
return nil;
}
這是我封裝的一個(gè)方法,原理其實(shí)很簡(jiǎn)單,我也打了很多注釋所以就不講具體的思路了
使用方法
NSString *string = @"Hello everyone,好久沒有發(fā)簡(jiǎn)書了,發(fā)現(xiàn)最近一次article是兩個(gè)多月前了,真是Nothing is impossible!";
// 用正則表達(dá)式分割出中英文兩個(gè)字符串
NSString *english = [self processWithString:string regularExpression:@"[a-zA-Z]"];
NSString *chinese = [self processWithString:string regularExpression:@"[\u4e00-\u9fa5]"];
NSLog(@"\n%@\n%@",chinese, english);
- 英文字母(不區(qū)分大小寫)正則表達(dá)式: [a-zA-Z]
- 中文正則表達(dá)式: [\u4e00-\u9fa5]
其實(shí)我封裝的這個(gè)方法可以使用的地方很多,你只需要調(diào)用一下這個(gè)這方法改變一下正則表達(dá)式就可以講你需要的東西從字符串分割出來,至于你問我正則表達(dá)式......自己去找吧