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

Objective-C 學習筆記:NSString 常用方法全攻略

     編輯:關於C語言

Objective-C 學習筆記:NSString 常用方法全攻略

NSString 是 Cocoa/Foundation 框架中處理不可變文本的核心類。本文系統整理其實例化、編碼、創建、格式化、拼接、比較、搜索、截取、文件讀寫等高頻操作,並對比 NSMutableString 可變對應方法,附帶代碼片段供速查。

一、實例化與初始化

// 基礎分配初始化
NSString *str = [[NSString alloc] init];
NSString *str = [[[NSString alloc] init] autorelease]; // 手動內存管理時代寫法

// 便利構造器(自動釋放池)
NSString *str1 = [NSString stringWithCString:"new String" encoding:NSASCIIStringEncoding];
NSString *str2 = [[NSString alloc] initWithCString:"new String" encoding:NSASCIIStringEncoding];
// str1 與 str2 語義等價,前者自動釋放,後者需手動 release

二、常用字符編碼常量

  • NSASCIIStringEncoding
  • NSUTF8StringEncoding(最常用)
  • NSUnicodeStringEncoding (UTF-16)

三、創建字符串實例

1. 字面量語法(僅限 ASCII)

NSString *str = @"Hello money~";

2. 包含中文等非 ASCII 字符

// 自動釋放
NSString *string = [NSString stringWithCString:"您好" encoding:NSUTF8StringEncoding];
// 手動管理
NSString *string = [[NSString alloc] initWithCString:"您好" encoding:NSUTF8StringEncoding];

3. 格式化創建(類 printf)

NSString *str = @"hello";
NSString *string = [NSString stringWithFormat:@"%@ world", str];
// 結果: "hello world"

NSString *string2 = [[NSString alloc] initWithFormat:@"%@ %d", @"Number:", 42];

四、常用格式化佔位符

佔位符含義
%@NSString 實例
%d, %D, %i有符號整數
%u, %U無符號整數
%x十六進制小寫
%X十六進制大寫
%f浮點數
%c單字符
%sC 風格字符串
%%字面 %

五、NSRange 結構體

typedef struct _NSRange {
    unsigned int location;
    unsigned int length;
} NSRange;

// 創建範圍
NSRange range = NSMakeRange(0, 5); // location=0, length=5
NSLog(@"location=%d, length=%d", range.location, range.length);

六、核心實例方法

1. 獲取長度

- (NSUInteger)length; // 返回字符數(非字節數)

2. 字符串拼接(返回新字符串)

- (NSString *)stringByAppendingString:(NSString *)aString;
- (NSString *)stringByAppendingFormat:(NSString *)format, ...;

NSString *str1 = @"hello";
NSString *str2 = @"world";
NSString *str3 = [str1 stringByAppendingString:str2]; // "helloworld"
NSString *str4 = [str2 stringWithFormat:@"%d...%d", 10, 20]; // "world10...20"

3. 可變字符串 NSMutableString 操作(原地修改)

// 創建
NSMutableString *mStr = [NSMutableString stringWithString:@"hello"]; // 自動釋放
NSMutableString *mStr2 = [[NSMutableString alloc] initWithString:@"hello"]; // 手動管理

// 追加
[mStr appendString:@" money"];
[mStr appendFormat:@" and %@", @"world"];

// 插入
[mStr insertString:@"OS " atIndex:4]; // "Mac OS X"

// 刪除
[mStr deleteCharactersInRange:NSMakeRange(0, 1)]; // 刪除首字符

4. 比較

- (BOOL)isEqualToString:(NSString *)aString; // 內容相等
- (BOOL)hasPrefix:(NSString *)aString;       // 前綴
- (BOOL)hasSuffix:(NSString *)aString;       // 後綴

NSString *s1 = @"Mac OS", *s2 = @"Mac Pro";
[s1 hasPrefix:@"Mac"]; // YES
[s2 hasSuffix:@"OS"];  // NO

5. 搜索與範圍查找

- (NSRange)rangeOfString:(NSString *)aString;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)range;

NSString *text = @"hello world";
NSRange r = [text rangeOfString:@"he"]; // {0, 2}
if (r.location != NSNotFound) { ... }

// 常用選項掩碼
NSCaseInsensitiveSearch  // 忽略大小寫
NSLiteralSearch          // 逐字節比較,較快
NSBackwardsSearch        // 從尾部向前搜索
NSAnchoredSearch         // 僅匹配指定範圍開頭

6. 截取子串

- (NSString *)substringToIndex:(NSUInteger)anIndex;      // [0, index)
- (NSString *)substringFromIndex:(NSUInteger)anIndex;    // [index, end]
- (NSString *)substringWithRange:(NSRange)aRange;        // 指定範圍

NSString *sub = [@"0123456789" substringWithRange:NSMakeRange(5, 2)]; // "56"

7. 文件讀寫

// 讀取(自動釋放)
NSError *error = nil;
NSString *content = [NSString stringWithContentsOfFile:@"/path/to/file.txt"
                                              encoding:NSUTF8StringEncoding
                                                 error:&error];
if (content) { /* 成功 */ }

// 寫入
BOOL ok = [content writeToFile:@"/path/out.txt"
                    atomically:YES
                      encoding:NSUTF8StringEncoding
                         error:&error];

// 路徑展開 ~
NSString *path = @"~/data.txt";
NSString *abs = [path stringByExpandingTildeInPath];
// 獲取擴展名
NSString *ext = [path pathExtension];

七、內存管理提示

  • 帶 string... 前綴的類方法返回自動釋放對象(ARC 環境下無需關心)。
  • alloc] init... 返回持有者,手動管理需 release,ARC 下自動釋放。
  • NSMutableString 方法多為 void 返回,原地修改,無新對象產生。

結語

熟練掌握 NSString 與 NSMutableString 的上述方法,能覆蓋 90% 以上的文本處理場景。實際開發中,優先使用字面量 @"" 與 stringWithFormat: 創建,文件操作務必檢查 NSError,搜索比較善用 options: 參數提升效率與準確度。

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