一、字元串基礎
在進行字元串分割之前,需要了解字元串的基礎知識。
在 iOS 中,字元串是 NSString 類的實例,它是一個不可變的 Unicode 字元序列。可以使用以下方式來創建字元串:
NSString *str1 = @"Hello, World!"; // 直接賦值 NSString *str2 = [NSString stringWithString:@"Hello, World!"]; // 使用類方法 NSString *str3 = [[NSString alloc] initWithFormat:@"Hello, %@", @"World!"]; // 格式化
字元串中的每一個字元都有一個對應的 Unicode 碼點,可以使用 length 屬性來獲取字元串長度,使用 characterAtIndex: 方法來獲取指定位置的字元:
NSString *str = @"Hello, World!"; NSUInteger len = [str length]; // 字元串長度 unichar ch = [str characterAtIndex:0]; // 獲取第一個字元'H'的Unicode碼點 NSLog(@"len = %lu, ch = %u", len, ch); // 輸出:len = 13, ch = 72
此外,NSString 還提供了一些常用的字元串操作方法,如查找子串、替換子串、格式化輸出等。詳情可以參考官方文檔。
二、常見字元串分割方法
1. 使用 componentsSeparatedByString: 方法
componentsSeparatedByString: 方法是 NSString 類的實例方法,它接受一個字元串作為參數,將原字元串按照參數字元串進行分割,返回分割後的字元串數組。
NSString *str = @"apple,banana,orange"; NSArray *arr = [str componentsSeparatedByString:@","]; NSLog(@"%@", arr); // 輸出:[apple, banana, orange]
該方法是最常用的字元串分割方法之一,它可以方便快速地將字元串按照某個分隔符分割成多段字元串。
2. 使用 enumerateSubstringsInRange:options:usingBlock: 方法
enumerateSubstringsInRange:options:usingBlock: 方法是 NSString 類的另一個實例方法,它可以枚舉指定範圍內的所有子串。
NSString *str = @"apple,banana,orange"; [str enumerateSubstringsInRange:NSMakeRange(0, str.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) { NSLog(@"%@", substring); }]; // 輸出: // a // p // p // l // e // , // b // a // n // a // n // a // , // o // r // a // n // g // e
該方法可以靈活地控制子串的範圍和方式,但是相對於 componentsSeparatedByString: 方法,它的代碼量較大,可讀性較差,應根據實際情況選擇使用。
3. 使用 NSScanner 類
NSScanner 類是 Foundation 框架提供的一個輕量級的掃描器,它可以將字元串分割成多個子串,每個子串之間可以用自定義的分隔符或者定界符進行分割。
NSString *str = @"apple:banana:orange"; NSScanner *scanner = [NSScanner scannerWithString:str]; [scanner setCharactersToBeSkipped:nil]; // 設置跳過任意字元 NSString *subStr; while ([scanner scanUpToString:@":" intoString:&subStr]) { NSLog(@"%@", subStr); [scanner scanString:@":" intoString:nil]; // 跳過分隔符 } // 輸出: // apple // banana // orange
NSScanner 類的使用相對比較繁瑣,但是它可以實現更加複雜的字元串解析和處理。
三、面試常見題目
1. 如何判斷字元串是否只包含數字
可以使用 NSScanner 類或者正則表達式來判斷字元串是否只包含數字。
// 使用 NSScanner 類 NSString *str = @"12345"; NSScanner *scanner = [NSScanner scannerWithString:str]; BOOL isNumber = [scanner scanInteger:NULL] && [scanner isAtEnd]; NSLog(@"isNumber = %d", isNumber); // 輸出:isNumber = 1 // 使用正則表達式 NSString *str = @"12345"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[0-9]+$" options:0 error:NULL]; NSUInteger numMatches = [regex numberOfMatchesInString:str options:0 range:NSMakeRange(0, str.length)]; NSLog(@"isNumber = %d", (numMatches > 0)); // 輸出:isNumber = 1
2. 如何將字元串轉化為數組,並去除重複項
可以使用 componentsSeparatedByString: 方法將字元串轉化為數組,使用 NSSet 類型去除重複項,最後再將 NSSet 轉換為數組。
NSString *str = @"apple,banana,orange,apple"; NSArray *arr1 = [str componentsSeparatedByString:@","]; NSSet *set = [NSSet setWithArray:arr1]; NSArray *arr2 = [set allObjects]; NSLog(@"%@", arr2); // 輸出:[apple, banana, orange]
3. 如何將字元串按照單詞進行反轉
可以先將字元串按照空格進行分割,得到單詞數組,然後將數組進行反轉,最後再將數組合併成一個字元串。
NSString *str = @"Hello, World!"; NSArray *arr1 = [str componentsSeparatedByString:@" "]; NSArray *arr2 = [[arr1 reverseObjectEnumerator] allObjects]; NSString *str2 = [arr2 componentsJoinedByString:@" "]; NSLog(@"%@", str2); // 輸出:World! Hello,
四、總結
本文從字元串基礎、常見字元串分割方法、面試常見題目三個方面對 iOS 字元串分割進行了深入研究。在實際開發中,應根據實際情況選擇合適的字元串分割方法,並結合其他字元串操作方法進行處理。
原創文章,作者:PNJF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133682.html