
玩轉(zhuǎn) NSString
Objective-C里核心的處理字符串的類就是NSString和NSMutableString這兩個(gè)類,這兩個(gè)類完成了Objective-C中字符串大部分功能的處理
NSString
字符串屬性
//////////字符串屬性//////////
NSString *str1 = @"string";
NSLog(@"長度: %ld", str1.length);
NSLog(@"描述: %@", str1.description);
NSLog(@"哈希地址: %lu", (unsigned long)str1.hash);
NSLog(@"字符串對應(yīng)下標(biāo)字符: %c", [str1 characterAtIndex:2]);
//輸出: 長度: 6
//輸出: 描述: string
//輸出: 哈希地址: 10152471993823965
//輸出: 字符串對應(yīng)下標(biāo)字符: r
字符串截取
//截取指定位置之后的字符串
- (NSString *)substringFromIndex:(NSUInteger)from;
//從0下標(biāo)開始截取到指定位置的字符串
- (NSString *)substringToIndex:(NSUInteger)to;
//截取指定范圍的字符串
- (NSString *)substringWithRange:(NSRange)range;
//截取字符串指定范圍的字符
- (void)getCharacters:(unichar *)buffer range:(NSRange)range;
字符串比較
將兩個(gè)字符串進(jìn)行計(jì)較,返回NSComparisonResult枚舉結(jié)果
比較結(jié)果:
| NSComparisonResult | 說明 |
|---|---|
| NSOrderedAscending | 升序 (左小右大) |
| NSOrderedSame | 相同 (內(nèi)容相同) |
| NSOrderedDescending | 降序 (左大右小) |
比較選項(xiàng):
| NSStringCompareOptions | 說明 |
|---|---|
| NSCaseInsensitiveSearch | 不區(qū)分大小寫比較 |
| NSLiteralSearch | 區(qū)分大小寫比較 |
| NSBackwardsSearch | 從字符串末尾開始搜索 |
| NSAnchoredSearch | 搜索限制范圍的字符串 |
| NSNumericSearch | 按照字符串里的數(shù)字為依據(jù),算出順序 |
| NSDiacriticInsensitiveSearch | 忽略 "-" 符號的比較 |
| NSWidthInsensitiveSearch | 忽略字符串的長度,比較出結(jié)果 |
| NSForcedOrderingSearch | 忽略不區(qū)分大小寫比較的選項(xiàng) |
| NSRegularExpressionSearch | 只能應(yīng)用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:...方法 |
//////////字符串比較//////////
//1.比較
- (NSComparisonResult)compare:(NSString *)string;
//2.比較(指定字符串,條件)
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
//3.比較(指定字符串,條件,范圍)
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
//4.比較(指定字符串,條件,范圍,本地化)
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(nullable id)locale;
//5.比較(不區(qū)分大小寫)
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
//6.本地化比較
- (NSComparisonResult)localizedCompare:(NSString *)string;
//7.本地化比較(不區(qū)分大小寫)
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;
//8.本地化比較(標(biāo)準(zhǔn))
- (NSComparisonResult)localizedStandardCompare:(NSString *)string;
//9.判斷兩個(gè)字符串是否內(nèi)容一致
- (BOOL)isEqualToString:(NSString *)aString;
字符串搜索
//////////搜索基本//////////
//1.是否包含前綴(以str開頭)
- (BOOL)hasPrefix:(NSString *)str;
//2.是否包含后綴(以str結(jié)尾)
- (BOOL)hasSuffix:(NSString *)str;
//3.獲取公共前綴
- (NSString *)commonPrefixWithString:(NSString *)str options:(NSStringCompareOptions)mask;
//4.是否包含字符串
- (BOOL)containsString:(NSString *)str;
//5.本地化是否包含字符串(不區(qū)分大小寫)
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;
//6.本地化是否包含字符串(標(biāo)準(zhǔn))
- (BOOL)localizedStandardContainsString:(NSString *)str;
//7.本地化搜索字符串范圍(標(biāo)準(zhǔn))
- (NSRange)localizedStandardRangeOfString:(NSString *)str;
//////////搜索字符串//////////
//8.搜索(指定字符串)
- (NSRange)rangeOfString:(NSString *)searchString;
//9.搜索(指定字符串,條件)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;
//10.搜索(指定字符串,條件,范圍)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;
//11.搜索(指定字符串,條件,范圍,本地化)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(nullable NSLocale *)locale;
//////////搜索字符集合//////////
//12.搜索(指定字符集合)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet;
//13.搜索(指定字符集合,條件)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet options:(NSStringCompareOptions)mask;
//14.搜索(指定字符集合,條件,范圍)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet options:(NSStringCompareOptions)mask range:(NSRange)searchRange;
//15.用字符串的字符編碼指定索引查找位置
- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;
//16.用字符串的字符編碼指定區(qū)域段查找位置
- (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range;
字符串拼接
//////////字符串拼接//////////
NSString *string = @"1";
NSString *appStr = @"2";
NSString *resultStr1 = [string stringByAppendingString:appStr];
NSString *resultStr2 = [string stringByAppendingFormat:@" + %@", appStr];
NSLog(@"普通拼接: %@", resultStr1);
NSLog(@"格式化拼接: %@", resultStr2);
//輸出: 普通拼接: 12
//輸出: 格式化拼接: 1 + 2
字符串基本類型轉(zhuǎn)換
//////////字符串基本類型轉(zhuǎn)換//////////
NSString *numStr = @"87234.2345";
NSLog(@"double型: %f", numStr.doubleValue);
NSLog(@"float型: %f", numStr.floatValue);
NSLog(@"int型: %d", numStr.intValue);
NSLog(@"NSInteger型: %ld", numStr.integerValue);
NSLog(@"long long型: %lld", numStr.longLongValue);
NSLog(@"BOOL型: %d", numStr.boolValue);
//輸出: double型: 87234.234500
//輸出: float型: 87234.234375
//輸出: int型: 87234
//輸出: NSInteger型: 87234
//輸出: long long型: 87234
//輸出: BOOL型: 1
字符串大小寫轉(zhuǎn)換
//////////字符串大小寫轉(zhuǎn)換//////////
NSString *string = @"string";
NSLog(@"大寫: %@", string.uppercaseString);
NSLog(@"小寫: %@", string.lowercaseString);
NSLog(@"首字母大寫: %@", string.capitalizedString);
//輸出: 大寫: STRING
//輸出: 小寫: string
//輸出: 首字母大寫: String
//本地化(大寫)
- (NSString *)uppercaseStringWithLocale:(nullable NSLocale *)locale;
//本地化(小寫)
- (NSString *)lowercaseStringWithLocale:(nullable NSLocale *)locale;
//本地化(首字母大寫)
- (NSString *)capitalizedStringWithLocale:(nullable NSLocale *)locale;
字符串分行,分段
//////////分行//////////
//1.指定范圍,分行取字符串
- (void)getLineStart:(nullable NSUInteger *)startPtr end:(nullable NSUInteger *)lineEndPtr contentsEnd:(nullable NSUInteger *)contentsEndPtr forRange:(NSRange)range;
//2.獲取指定范圍該行的范圍
- (NSRange)lineRangeForRange:(NSRange)range;
//////////分段//////////
//3.指定范圍,分段取字符串
- (void)getParagraphStart:(nullable NSUInteger *)startPtr end:(nullable NSUInteger *)parEndPtr contentsEnd:(nullable NSUInteger *)contentsEndPtr forRange:(NSRange)range;
//4.獲取指定范圍該段落的范圍
- (NSRange)paragraphRangeForRange:(NSRange)range;
//////////字符串分行,分段//////////
NSString *string = @"123 456\nABC,DEF\nabc.def";
//獲取該行的范圍(指定范圍)
NSRange range1 = [string lineRangeForRange:NSMakeRange(0, 10)];
NSLog(@"%ld 行長度: %ld", range1.location, range1.length);
//輸出: 0 行長度: 16
//獲取該段落范圍(指定范圍)
NSRange range2 = [string paragraphRangeForRange:NSMakeRange(0, 3)];
NSLog(@"%ld 段落長度: %ld", range2.location, range2.length);
//輸出: 0 段落長度: 8
字符串列舉(按條件)
列舉選項(xiàng):
| NSStringEnumerationOptions | 說明 |
|---|---|
| NSStringEnumerationByLines | 按行 |
| NSStringEnumerationByParagraphs | 按段落 |
| NSStringEnumerationByComposedCharacterSequences | 按字符順序 |
| NSStringEnumerationByWords | 按單詞,字 |
| NSStringEnumerationBySentences | 按句子 |
| NSStringEnumerationReverse | 反向遍歷 |
| NSStringEnumerationSubstringNotRequired | 不需要子字符串 |
| NSStringEnumerationLocalized | 本地化 |
//////////字符串列舉//////////
NSString *string = @"123456\nABCDEF\nabcdef
//1.列舉(按行)
[string enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
NSLog(@"每行: %@", line);
}];
//輸出: 每行: 123456
//輸出: 每行: ABCDEF
//輸出: 每行: abcdef
//2.列舉(范圍,條件)
[string enumerateSubstringsInRange:NSMakeRange(5, 10) options:NSStringEnumerationByLines usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
NSLog(@"%@", substring);
NSLog(@"%ld %ld", substringRange.location, substringRange.length);
NSLog(@"%ld %ld", enclosingRange.location, enclosingRange.length);
}];
//輸出: 6
//輸出: 5 1
//輸出: 5 2
//輸出: ABCDEF
//輸出: 7 6
//輸出: 7 7
//輸出: a
//輸出: 14 1
//輸出: 14 1
字符串編碼和轉(zhuǎn)換
//////////字符串編碼和轉(zhuǎn)換//////////
NSString *string = @"string";
NSLog(@"最快編碼值(枚舉): %lu", (unsigned long)string.fastestEncoding);
NSLog(@"最小編碼值(枚舉): %lu", (unsigned long)string.smallestEncoding);
NSLog(@"UTF8編碼值: %s", string.UTF8String);
//輸出: 最快編碼值(枚舉): 1
//輸出: 最小編碼值(枚舉): 1
//輸出: UTF8編碼值: string
//1.選擇編碼,是否允許有損編碼
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)lossy;
//2.選擇編碼
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding;
//3.判斷是否可以無損編碼
- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding;
//4.C字符編碼轉(zhuǎn)換
- (nullable __strong const char *)cStringUsingEncoding:(NSStringEncoding)encoding;
//5.判讀C字符轉(zhuǎn)化是否可以成功
- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;
//6.指定緩存區(qū)轉(zhuǎn)換
- (BOOL)getBytes:(nullable void *)buffer maxLength:(NSUInteger)maxBufferCount usedLength:(nullable NSUInteger *)usedBufferCount encoding:(NSStringEncoding)encoding options:(NSStringEncodingConversionOptions)options range:(NSRange)range remainingRange:(nullable NSRangePointer)leftover;
//7.對字符串進(jìn)行編碼時(shí)所需的最大字節(jié)數(shù)
- (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc;
//8.對字符串進(jìn)行編碼時(shí)所需的字節(jié)數(shù)
- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;
//9.可用字符串編碼
+ (const NSStringEncoding *)availableStringEncodings;
//10.本地化編碼名稱
+ (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;
//11.默認(rèn)C字符串編碼
+ (NSStringEncoding)defaultCStringEncoding;
字符串分割
字符集合:
| NSCharacterSet | 說明 |
|---|---|
| controlCharacterSet | 控制符 |
| whitespaceCharacterSet | 空格符 |
| whitespaceAndNewlineCharacterSet | 空格換行符 |
| decimalDigitCharacterSet | 小數(shù) |
| letterCharacterSet | 文字 |
| lowercaseLetterCharacterSet | 小寫字母 |
| uppercaseLetterCharacterSet | 大寫字母 |
| nonBaseCharacterSet | 非基礎(chǔ) |
| alphanumericCharacterSet | 數(shù)字字母 |
| decomposableCharacterSet | 可分解 |
| illegalCharacterSet | 非法 |
| punctuationCharacterSet | 標(biāo)點(diǎn) |
| capitalizedLetterCharacterSet | 大寫 |
| symbolCharacterSet | 符號 |
| newlineCharacterSet | 換行符 |
//////////字符串分割//////////
NSString *string = @"A_B_c_D_E_F";
//分割(指定字符串)
NSArray *resultArr1 = [string componentsSeparatedByString:@"_"];
NSLog(@"%@", resultArr1);
//輸出: (A, B, c, D, E, F)
//分割(指定字符集合)
NSArray *resultArr2 = [string componentsSeparatedByCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]];
NSLog(@"%@", resultArr2);
//輸出: ("A_B_" , "_D_E_F")
字符串操作(修剪,填充,折疊,替換)
NSString *string = @"3EWRs a;af";
//////////修剪//////////
NSString *result1 = [string stringByTrimmingCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]];
NSLog(@"%@", result1);
//輸出: 3EWRs a;
//////////填充//////////
NSString *result2 = [string stringByPaddingToLength:20 withString:@"填充" startingAtIndex:1];
NSLog(@"%@", result2);
//輸出: 3EWRs a;af充填充填充填充填充填
//////////折疊//////////
NSString *result3 = [string stringByFoldingWithOptions:NSNumericSearch locale:[NSLocale systemLocale]];
NSLog(@"%@", result3);
//輸出: 3EWRs a;af
//////////替換//////////
//替換(指定字符串)
NSString *result4 = [string stringByReplacingOccurrencesOfString:@" " withString:@"替換"];
NSLog(@"%@", result4);
//輸出: 3EWRs替換a;af
//替換(指定字符串,條件,范圍)
NSString *result5 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"替換" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length - 2)];
NSLog(@"%@", result5);
//輸出: 3EWRs 替換;af
//替換(指定范圍)
NSString *result6 = [string stringByReplacingCharactersInRange:NSMakeRange(0, string.length) withString:@"替換"];
NSLog(@"%@", result6);
//輸出: 替換
字符串翻譯
翻譯選項(xiàng):
| 翻譯選擇 | 說明 |
|---|---|
| NSStringTransformLatinToKatakana | 拉丁->片假名 |
| NSStringTransformLatinToHiragana | 拉丁->平假名 |
| NSStringTransformLatinToHangul | 拉丁->韓語 |
| NSStringTransformLatinToArabic | 拉丁->阿拉伯語 |
| NSStringTransformLatinToHebrew | 拉丁->希伯來語 |
| NSStringTransformLatinToThai | 拉丁->泰國 |
| NSStringTransformLatinToCyrillic | 拉丁->西里爾字母 |
| NSStringTransformLatinToGreek | 拉丁->希臘 |
| NSStringTransformToLatin | 拉丁 |
| NSStringTransformMandarinToLatin | 普通話->拉丁 |
| NSStringTransformHiraganaToKatakana | 平假名->片假名 |
| NSStringTransformFullwidthToHalfwidth | 全角->半角 |
| NSStringTransformToXMLHex | XML16進(jìn)制 |
| NSStringTransformToUnicodeName | Unicode名 |
| NSStringTransformStripCombiningMarks | 結(jié)合地帶商標(biāo) |
| NSStringTransformStripDiacritics | 帶音符 |
//////////字符串翻譯//////////
NSString *dalian = @"大連";
NSString *result = [dalian stringByApplyingTransform:NSStringTransformMandarinToLatin reverse:NO];
NSLog(@"%@", result);
//輸出: dà lián
字符串寫入
//////////字符串寫入//////////
//寫入到指定路徑,編碼的文件中
[string writeToFile:@"/Users/Desktop/LuisX.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
//寫入到指定URL,編碼的文件中
[string writeToURL:[NSURL URLWithString:@"file://LuisX.text"] atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSMutableString
繼承自NSString
NSString中的方法在NSMutableString都可以使用
NSMutableString是動態(tài)的字符串,可以動態(tài)的添加,修改,刪除等
可變字符串分配容量
提前指定的容量,知識用于內(nèi)存優(yōu)化,實(shí)際大小可以大于設(shè)置的容量capacity
//////////字符串分配容量//////////
//1.初始化容量為Capacity大小的字符串 (需要手動釋放內(nèi)存)
NSMutableString *mutableStr1 = [[NSMutableString alloc] initWithCapacity:20];
//2.初始化容量為Capacity大小的字符串 (不需要手動釋放內(nèi)存)
NSMutableString *mutableStr2 = [NSMutableString stringWithCapacity:20];
可變字符串?dāng)U展方法
NSMutableString *str = [NSMutableString stringWithString:@"string"];
//////////插入//////////
[str insertString:@"123" atIndex:2];
NSLog(@"%@", str);
//輸出: st123ring
//////////刪除//////////
[str deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"%@", str);
//輸出: st3ring
//////////拼接//////////
[str appendString:@"456"];
NSLog(@"%@", str);
//輸出: st3ring456
//////////格式化拼接//////////
[str appendFormat:@"7 89"];
NSLog(@"%@", str);
//輸出: st3ring4567 89
//////////設(shè)置新字符串//////////
[str setString:@"string"];
NSLog(@"%@", str);
//輸出: string
//////////字符串替換//////////
//1.指定范圍替換
[str1 replaceCharactersInRange:NSMakeRange(2, 2) withString:@"123"];
NSLog(@"%@", str1);
//輸出: st123ng
//2.指定字符串,條件,范圍替換
[str1 replaceOccurrencesOfString:@"123" withString:@"--" options:NSRegularExpressionSearch range:NSMakeRange(0, str1.length)];
NSLog(@"%@", str1);
//輸出: st--ng