一、字符串基礎
在進行字符串分割之前,需要了解字符串的基礎知識。
在 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-hk/n/133682.html