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

Objective-C 字符串操作全攻略:NSString 與 NSMutableString 核心用法

     編輯:關於C

NSString:不可變字符串

創建與初始化

// 1. alloc/init
NSString *s1 = [[NSString alloc] init];               // 空串
NSString *s2 = [[NSString alloc] initWithString:@"iPhone"];
// 2. 字面量(常量區)
NSString *s3 = @"iPhone";
// 3. 格式化
NSInteger ver = 6;
NSString *s4 = [[NSString alloc] initWithFormat:@"iPhone %ld", ver];
// 4. 便利構造器(自動釋放池)
NSString *s5 = [NSString string];
NSString *s6 = [NSString stringWithString:@"iOS"];
NSString *s7 = [NSString stringWithFormat:@"iOS %ld", ver];

常用操作

NSString *str = @"abcdpp123";

// 長度
NSUInteger len = str.length;

// 前綴/後綴判斷
BOOL hasPre = [str hasPrefix:@"abc"];   // YES
BOOL hasSuf = [str hasSuffix:@"123"];   // YES

// 子串截取
NSString *sub1 = [str substringToIndex:3];        // "abc"
NSString *sub2 = [str substringFromIndex:6];      // "123"
NSString *sub3 = [str substringWithRange:NSMakeRange(3,3)]; // "dpp"

// 拼接
NSString *cat1 = [sub1 stringByAppendingString:sub2]; // "abc123"
NSString *cat2 = [NSString stringWithFormat:@"%@%@", sub1, sub2];

// 替換
NSString *replaced = [@"NBANNN" stringByReplacingOccurrencesOfString:@"N" withString:@"C"]; // "CBACBA"

// 比較
NSString *a = [[NSString alloc] initWithFormat:@"NBA123"];
NSString *b = [[NSString alloc] initWithFormat:@"NBA123"];
[a isEqualToString:b]; // YES(內容比較)
a == b;               // NO(指針比較,堆區不同對象)

// 數值轉換
@"123a456".intValue;        // 123
@"123a456".integerValue;    // 123

// 大小寫
@"ios".uppercaseString;       // "IOS"
@"ios".capitalizedString;     // "Ios"
@"IOS".lowercaseString;       // "ios"

NSMutableString:可變字符串

NSMutableString *mStr = [NSMutableString stringWithCapacity:0];

// 追加
[mStr appendString:@"iPhone"];
[mStr appendFormat:@" %ld", 6]; // "iPhone 6"

// 插入
[mStr insertString:@" " atIndex:6]; // "iPhone 6" → "iPhone  6"

// 刪除
[mStr deleteCharactersInRange:NSMakeRange(0, 7)]; // 刪除 "iPhone " → "6"

// 替換範圍
[mStr replaceCharactersInRange:NSMakeRange(0, 1) withString:@"7"]; // "7"

// 實戰練習:文件名副名轉換
NSMutableString *fname = [NSMutableString stringWithString:@"藍鷗.png"];
if ([fname hasSuffix:@".png"]) {
    [fname replaceCharactersInRange:NSMakeRange(fname.length-4, 4) withString:@".jpg"];
} else {
    [fname appendString:@".jpg"];
}
// 結果:@"藍鷗.jpg"

關鍵區別總結

特性NSStringNSMutableString
可變性創建後不可修改可原地修改內容
內存語義複製多為引用計數+1需显式 copy 得到不可變副本
性能頻繁拼接產生大量中間對象大量修改時效率高得多
線程安全不可變天然線程安全非線程安全,需自行加鎖

最佳實踐建議

  • 默認使用 NSString,接口傳參、屬性聲明首選 copy 屬性;
  • 大量拼接、逐字符構建時改用 NSMutableString;
  • 利用 @"" 字面量簡化代碼,編譯期常量區唯一,極高效;
  • 格式化字符串統一用 stringWithFormat:,類型安全且可讀性強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved