玩轉(zhuǎn) NSString

玩轉(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容