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