Objective-C 字符串處理圍繞三大核心類展開:
NSString *str = @"Hello, World!";
編譯期確定,駐留在數據段,極高效。
NSString *str = [NSString stringWithFormat:@"User: %@, Age: %d", name, age];
類方法返回自動釋放對象,適合臨時字符串。
// C 字符串 char *cStr = "C String"; NSString *ocStr = [NSString stringWithUTF8String:cStr]; // NSData (指定編碼) NSData *data = ...; NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
| 轉換方向 | API 示例 | 備註 |
|---|---|---|
| int → NSString | [NSString stringWithFormat:@"%d", val] | 或 [@(val) stringValue] |
| NSString → int | [str intValue] | 同理 floatValue, doubleValue, boolValue |
| NSNumber → NSString | [num stringValue] | 封裝基本類型的首選 |
| NSString → NSData | [str dataUsingEncoding:NSUTF8StringEncoding] | 網絡/存儲必備 |
| NSData → NSString | [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] | 解碼失敗返回 nil |
// 兩兩拼接 NSString *combined = [str1 stringByAppendingString:str2]; // 多段拼接 (高效) NSString *combined = [NSString stringWithFormat:@"%@%@%@", a, b, c]; // 數組連接 NSArray *parts = @[@"A", @"B", @"C"]; NSString *joined = [parts componentsJoinedByString:@", "]; // "A, B, C"
NSString *source = @"Hello World"; // 截取前 5 字符 -> "Hello" NSString *prefix = [source substringToIndex:5]; // 從索引 6 到末尾 -> "World" NSString *suffix = [source substringFromIndex:6]; // 任意範圍 NSMakeRange(loc, len) NSString *mid = [source substringWithRange:NSMakeRange(3, 4)]; // "lo W"
NSRange range = [source rangeOfString:@"World"]; // 找不到返回 {NSNotFound, 0}
// 替換 (需 NSMutableString)
NSMutableString *mutable = [source mutableCopy];
[mutable replaceCharactersInRange:range withString:@"ObjC"]; // "Hello ObjC"
// 刪除
[mutable deleteCharactersInRange:NSMakeRange(5, 1)]; // 刪除空格
[str uppercaseString]; // 全大寫 [str lowercaseString]; // 全小寫 [str capitalizedString]; // 首字母大寫
// 內容相等 (推薦) [str1 isEqualToString:str2]; // 字典序比較 [str1 compare:str2]; // 返回 NSComparisonResult // 忽略大小寫 [str1 caseInsensitiveCompare:str2]; // 前後綴 [str hasPrefix:@"pre_"]; [str hasSuffix:@".log"];
NSString *path = @"~/Documents/file.txt"; // 展開 ~ NSString *abs = [path stringByExpandingTildeInPath]; // /Users/name/Documents/file.txt // 縮寫 ~ NSString *shortPath = [abs stringByAbbreviatingWithTildeInPath]; // ~/Documents/file.txt // 擴展名 NSString *ext = [path pathExtension]; // "txt" // 刪除擴展名 NSString *name = [path stringByDeletingPathExtension];
頻繁拼接時預分配容量可減少內存重分配:
NSMutableString *buf = [NSMutableString stringWithCapacity:1024];
for (int i = 0; i < 1000; ++i) {
[buf appendFormat:@"Item %d\n", i];
}
[str componentsSeparatedByString:@","][array componentsJoinedByString:@";"]NSUTF8StringEncoding,避免亂碼。NSMutableString 追加。[@"" length] == 0,但 [nil length] == 0 也成立,邏輯判斷需注意語義區別。%@ 對應對象 description,%d/%f 對應基本類型,%p 打印指針地址。掌握 NSString / NSMutableString 的創建、轉換、拼接、查找、比較、路徑操作,即可覆蓋 95% 的 iOS/macOS 開發場景。記住核心原則:優先用不可變對象保證線程安全,高頻修改轉用可變對象並預分配容量,跨邊界傳輸統一 UTF-8 編碼。