NSScanner 過濾字符串

在使用<ContactsUI/ContactsUI.h>框架獲取通訊錄手機號碼時,不同的 iOS 系統最後得到的手機號碼也不同。有的是xxx-xxxx-xxxx,有的是 xxx xxxx xxxx。爲了得到有效的手機號碼,可以用正則過濾字符串。如以下代碼。

NSMutableString *mobile = [NSMutableString stringWithString:@"131-0000-2222"];
NSMutableString *phone = [NSMutableString string];
for(int i =0; i < [mobile length]; i++) {
     NSString *temp = [mobile substringWithRange:NSMakeRange(i,1)];
     NSString *regex = @"^[0-9]+$";
     NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
     if ([pred evaluateWithObject:temp]) {
         [phone appendString:temp];
     }
}

除了正則外,今天要介紹的是NSScanner 過濾器。先看一下 apple 文檔裏對 NSScanner 的說明。【一個字符串解析器,用於掃描字符集中的子字符或字符,以及十進制、十六進制和浮點表示形式的數值。】

常用屬性有以下幾個:
  • charactersToBeSkipped,設置忽略指定字符,默認是空格和回車。
  • isAtEnd,是否掃描結束。
  • scanLocation,掃描開始的位置。

用 NSScanner 掃描字符串得到有效的手機號碼,代碼如下:

NSString *originalStr = @"131-0000-2222";
NSMutableString *stripStr = [NSMutableString stringWithCapacity:originalStr.length];
NSScanner *scanner = [NSScanner scannerWithString:originalStr];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
while ([scanner isAtEnd] == NO) {
    NSString *buffer;
    if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
        [stripStr appendString:buffer];
    } else {
        [scanner setScanLocation:[scanner scanLocation] + 1];
    }
}
平時我們用的條件判斷一般以 if正則表達式 居多,NSScanner 其實也是一個陌生且又強大的條件判斷器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章