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

Objective-C 字符串處理大全:從創建、轉換到進階操作的完整指南

     編輯:關於C語言

核心類速覽

Objective-C 字符串處理圍繞三大核心類展開:

  • NSString:不可變字符串,線程安全,適合只讀場景。
  • NSMutableString:可變字符串,支持增刪改,性能優於反覆創建不可變對象。
  • NSData / NSString 互轉:網絡傳輸、文件存儲的必經環節。

基礎創建與初始化

1. 常量字面量(推薦)

NSString *str = @"Hello, World!";

編譯期確定,駐留在數據段,極高效。

2. 格式化創建

NSString *str = [NSString stringWithFormat:@"User: %@, Age: %d", name, age];

類方法返回自動釋放對象,適合臨時字符串。

3. 從 C 字符串 / 數據創建

// 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 進階:容量預分配

頻繁拼接時預分配容量可減少內存重分配:

NSMutableString *buf = [NSMutableString stringWithCapacity:1024];
for (int i = 0; i < 1000; ++i) {
    [buf appendFormat:@"Item %d\n", i];
}

集成容器:NSArray / NSDictionary 中的字符串

  • 分割字符串為數組:[str componentsSeparatedByString:@","]
  • 數組合併為字符串:[array componentsJoinedByString:@";"]
  • 字典鍵值:鍵通常用 NSString,值可存任意對象。

編碼陷阱與最佳實踐

  1. 永遠指定編碼:網絡/文件讀寫必須顯式使用 NSUTF8StringEncoding,避免亂碼。
  2. 避免在循環中用 stringWithFormat:大量臨時對象導致自動釋放池壓力大,改用 NSMutableString 追加。
  3. 空字符串 vs nil:[@"" length] == 0,但 [nil length] == 0 也成立,邏輯判斷需注意語義區別。
  4. 格式化符號:%@ 對應對象 description,%d/%f 對應基本類型,%p 打印指針地址。

總結

掌握 NSString / NSMutableString 的創建、轉換、拼接、查找、比較、路徑操作,即可覆蓋 95% 的 iOS/macOS 開發場景。記住核心原則:優先用不可變對象保證線程安全,高頻修改轉用可變對象並預分配容量,跨邊界傳輸統一 UTF-8 編碼。

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