首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Objective-C NSString 常用方法全景指南

     編輯:關於C

NSString 是 Cocoa/Foundation 框架中使用頻率最高的類之一。本文系統整理創建、查詢、比較、搜索、截取、編碼轉換、路徑操作、格式化等核心方法,並標註常見陷阱與最佳實踐,作為開發速查手冊。

一、創建與初始化

場景方法備註
字面量@"text"編譯期常量,駐留內存
格式化[NSString stringWithFormat:@"%d-%@", 自動釋放池管理
文件讀取[NSString stringWithContentsOfFile:encoding:error:]指定編碼 (NSUTF8StringEncoding)
數據轉換[[NSString alloc] initWithData:encoding:]持有實例需手動 release/ARC
數值轉換[NSString stringWithFormat:@"%d", num] / @(num).stringValue後者為現代語法糖

二、基本屬性查詢

NSString *s = @"Hello 世界";
// 長度
NSUInteger len = s.length;           // 字符數 (7)
NSUInteger bytes = [s lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; // 字節數 (11)
// 判空
BOOL empty = (s.length == 0);        // 推薦
// 也可: [s isEqualToString:@""]

三、字符訪問與子串

操作方法示例
單字符characterAtIndex:unichar c = [s characterAtIndex:0]; // 'H'
範圍子串substringWithRange:[s substringWithRange:NSMakeRange(0,5)] // "Hello"
前綴substringToIndex:[s substringToIndex:5]
後綴substringFromIndex:[s substringFromIndex:6] // "世界"

注意:所有索引基於 UTF-16 代碼單元 (unichar),Emoji/補充平面字符佔 2 個代碼單元。

四、比較與匹配

// 精確比較
BOOL eq = [s1 isEqualToString:s2];          // 區分大小寫
BOOL eqCi = [s1 caseInsensitiveCompare:s2] == NSOrderedSame;

// 前綴/後綴
BOOL hasPre = [s hasPrefix:@"Hello"];
BOOL hasSuf = [s hasSuffix:@"世界"];

// 完整匹配選項
NSComparisonResult r = [s1 compare:s2
    options:NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch
    range:NSMakeRange(0, s1.length)
    locale:[NSLocale currentLocale]];

五、搜索與範圍

需求方法返回
首次出現rangeOfString:NSRange (location=NSNotFound 表示未找到)
最後出現rangeOfString:options:NSBackwardsSearch同前
字符集搜索rangeOfCharacterFromSet:如尋找數字: [NSCharacterSet decimalDigitCharacterSet]
所有匹配enumerateSubstringsInRange:options:usingBlock:塊回調枚舉

六、修改與拼接(返回新實例,原字符串不可變)

// 替換
NSString *replaced = [s stringByReplacingOccurrencesOfString:@"世界"
                                                      withString:@"Swift"];
// 刪除前後空白/換行
NSString *trimmed = [s stringByTrimmingCharactersInSet:
                     [NSCharacterSet whitespaceAndNewlineCharacterSet]];

// 大小寫
NSString *upper = [s uppercaseString];
NSString *lower = [s lowercaseString];
NSString *cap = [s capitalizedString];  // 每詞首字母大寫

// 拼接
NSString *joined = [@[@"A", @"B", @"C"] componentsJoinedByString:@","];
NSString *fmt = [NSString stringWithFormat:@"%@-%@", @"A", @"B"];

七、編碼轉換與數據交互

// NSString → NSData
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
// NSData → NSString
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// URL 編碼
NSString *escaped = [s stringByAddingPercentEncodingWithAllowedCharacters:
                     [NSCharacterSet URLQueryAllowedCharacterSet]];
// URL 解碼
NSString *unescaped = [escaped stringByRemovingPercentEncoding];

八、路徑操作(文件系統專用)

NSString *path = @"/Users/name/Docs/file.txt";
// 組件
NSArray *comps = [path pathComponents];  // @[@"/", @"Users", @"name", @"Docs", @"file.txt"]
// 最後組件
NSString *last = [path lastPathComponent]; // "file.txt"
// 擴展名
NSString *ext = [path pathExtension];      // "txt"
// 刪除擴展名
NSString *base = [path stringByDeletingPathExtension];
// 擴展路徑
NSString *abs = [path stringByExpandingTildeInPath];  // ~ → /Users/name
// 拼接路徑
NSString *newPath = [path stringByAppendingPathComponent:@"subdir"];

九、格式化規範速查

佔位符含義示例
%@Objective-C 對象 (description)@"%@", obj
%d/%i有符號整數@"%d", 42
%u無符號整數@"%u", 42u
%lld64位整數@"%lld", 1LL<<40
%f浮點數 (默認6位小數)@"%.2f", 3.14159
%p指針地址@"%p", ptr
%%字面 %@"100%%"

十、常見陷阱與最佳實踐

  1. 不可變性:NSString 實例創建後不可修改,所有「修改」方法返回新實例
  2. 編碼一致性:網絡/文件 I/O 必須顯式指定編碼,默認非 UTF-8
  3. 性能敏感場景:大量拼接用 NSMutableString 或 [NSArray componentsJoinedByString:],避免循環 stringWithFormat:
  4. 本地化:用戶可見字符串使用 NSLocalizedString(@"key", @"comment"),配合 .strings 文件
  5. 空指針安全:[nil length] 返回 0,[nil isEqualToString:@""] 返回 NO,無需額外判空
  6. Emoji 處理:按字符枚舉用 enumerateSubstringsInRange:options:NSStringEnumerationByComposedCharacterSequences

總結

NSString 作為 Foundation 核心,API 設計兼顧 Unicode 正確性、內存安全、本地化支持。熟練掌握上述分類方法,配合現代 Objective-C 語法糖 (@(), 字面量語法),能顯著提升字符串處理代碼的可讀性、健壯性與性能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved