Objective-C學習篇06—NSString與NSMutableString,objectivecnsstring

來源:互聯網
上載者:User

Objective-C學習篇06—NSString與NSMutableString,objectivecnsstring

NSString

  OC提供了定義字串對象的方法,也就是將想要表達的字串用一對雙引號引起來,並在開頭加上@.@是OC中的指令符,它告訴編譯器@以後的內容為OC中的文法.比如@”Harbingwang”表示的是一個NSString類型的常量.

  NSString 是一個不可變的字串類,繼承自 NSObject ,用NSString建立出來的字串對象,一經建立就不能再修改了.我們可以對它執行尋找或比較等操作,但是不能通過增加,刪除它的字元來動態地改變它.

  NSString主要的方法都在Foundation/NSString.h中定義的,NSString提供了很多方法的介面,但是這些方法的實現都是由內部具體實現的.下面將對NSString的主要方法進行說明:

  1. 快速建立字串對象

NSString *str = @"叔叔約嗎?";  

  2. 產生指定格式的字串

  格式化建立字串    initWithFormat:

  便利構造器方法建立 stringWithFormat:

    NSString *str = [[NSString alloc] initWithFormat:@"name:%@ age:%ld,  name, age];

    NSString *str = [NSString stringWithFormat:@"name:%@ age:%ld,  name, age];

     練習:將字串@"2015.11.18"和@"2016.1.1"初始化為一個新的字串@"2015.11.18--2016.1.1"

    NSString *date = [NSString stringWithFormat:@"%@%@%@", @"2015.11.18", @"--", @"2016.1.1"];

     3. 將C語言中的字串轉換為OC中的字串對象    initWithUTF8String:

NSString *str = [NSString alloc] initWithUTF8String:"iOS"];

     4. 使用檔案中的常值內容以指定編碼格式建立字串對象   initWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>

     第一個參數: 檔案路徑

     第二個參數: 編碼格式 NSUTF8StringEncoding  8位Unicode編碼 適用於使用中文的編碼格式

     第三個參數: 如果出錯, 這個參數用來儲存報錯資訊,一般填nil

NSString *str = [[NSString alloc] initWithContentsOfFile:@"/Users/Desktop/Product/OC/Lesson/OCLessonNSString-04/OCLessonNSString-04/Harbingwang.txt" encoding:NSUTF8StringEncoding error:nil];

  對應的便利構造器  stringWithContentsOfFile: encoding: error:

 

     5. 計算字串的長度  length 

NSString *string = @"iPhone6splus買"; // 無論是數字,英文還是漢字,都是按一個字元來算NSUInteger length = string.length;  //可以使用點文法NSLog(@"%lu", length);

   

  首先在這裡補充兩點:

  1.父串與子串的概念: A串中存在連續的多個字元和B字串相同,A是B的父串,B是A的子串

  2. NSRang 是一個表示範圍的結構體,其中包括了資料的首地址location和資料長度legth

typedef struct _NSRange {NSUInteger location; // 起始位置NSUInteger length;  // 從起始位置開始取多長} NSRange;

  6.字串的截取


substringWithRange:
// a. 返回一個新字串,新字串開始的位置和長度由Rang決定
NSRange rang = {12, 1}; 
NSString *string = [string substringWithRange:rang];

substringToIndex:
// b. 擷取 從0開始到某個位置 的字串,但是 不包括提供位置的字元  

NSString *substring = [string substringToIndex:5];
NSLog(@"%@", substring); // 返回的是新的字串對象.所以用 %@ 佔位

substringFromIndex:
// c. 擷取從某個位置開始到結尾的子串,包含提供位置的字元  
NSString *substring = [string substringFromIndex:5]; 
NSLog(@"%@", substring);

  7.字串的檢索

 rangeOfString:// 返回一個新字串,新字串開始的位置和長度由Rang決定NSString *string = @"iloveyou";// 有如上字串,想得到子串 'love'在string4中的範圍NSRange rang1 = [string rangeOfString:@"love"];NSLog(@"%lu %lu", rang1.location, rang1.length);

  8.字串的拼接

stringByAppendingFormat:    //格式化拼接字串(可以拼接多個) 
NSString *string1 = @"iOS";NSString *string2 = @"開發";
NSString *newString = [string1 stringByAppendingFormat:@"%@", string2];stringByAppendingString:// 拼接字元竄(只能拼接一個)
NSString *newString2 = [String1 stringByAppendingString:@"入門基礎"];// 列印iOS入門基礎

  9.字串的替換

stringByReplacingOccurrencesOfString: withString:// 將目標字串從父串中替換為我們給定的字串// 找到目標字串就返回,找不到就返回原串// 例如: newString iOS開發入門基礎   把 iOS 替換為 AndroidNSString *newString1 = [newString2 stringByReplacingOccurrencesOfString:@"iOS" withString:@" Android"];stringByReplacingCharactersInRange: withString:// 根據提供的字串範圍進行替換  
NSRange rang2 = {0, 2};NSString *newString4 = [newString3 stringByReplacingCharactersInRange:rang2 withString:@"dong"];

  10.判斷

 hasPrefix:    // 判斷一個字串是否具有某個首碼 NSString *str15 = @"iOS開發基礎";BOOL isHas = [str15 hasPrefix:@"iOS"];// hasPrefix返回的是一個BOOL值NSLog(@"%@", isHas ? @"有這個首碼" : @"沒有這個首碼"); hasSuffix:  //判斷一個字串是否具有某個尾碼        isHas = [str15 hasSuffix:@"3G學院"];NSLog(@"%@", isHas ? @"有這個尾碼" : @"沒有這個尾碼"); 

  isEqualToString:  

   // 判斷兩個字串對象是否相等

    NSString *str1 = @"iOS";

  NSString *str2 = @"開發";

    BOOL isSame = [str1 isEqualToString:str2];

    NSLog(@"%@", isSame ? @"相同" : @"不相同");

    // 練習

判斷字串 @"HarbingWang"是否具有@".jpg"的尾碼,如果沒有就為其拼接上一個@".jpg",如果有就將@".jpg"替換為@".png"NSString *str = @"HarbingWang";
BOOL isHasJpg = [str16 hasSuffix:@".jpg"];
NSString *newStr = isHasJpg ? [str16 stringByReplacingOccurrencesOfString:@".jpg" withString:@".png"] : [str16 stringByAppendingString:@".jpg"];NSLog(@"%@", newStr);

    11. 比較

     比較兩個字串的大小(區分大小寫) compare:

     我們先來看下一下它在API中的聲明:
 - (NSComparisonResult)compare:(NSString *)string;// 傳回值為: NSComparisonResult  是一個枚舉類型的值,用於顯示比較結果enum {        NSOrderedAscending = -1,    // 升序,前一個小於後一個        NSOrderedSame,              // 相同,前後相同        NSOrderedDescending         // 降序,前一個大於後一個};typedef NSInteger NSComparisonResult;
   compare方法: 將接收對象和傳遞進來的字串進行逐個字元比較,返回一個NSComparisonResult來顯示比較的結果,如果返回的是NSOrderedAscending那麼前一個數值小於後一個數值,按升序排列.  例如:比較NBA與nba的大小
   NSString *str18 = @"NBA";    NSString *str19 = @"nba";    NSComparisonResult n = [str18 compare:str19];    switch (n) {
case NSOrderedAscending: NSLog(@"%@ < %@", str18, str19); break; case NSOrderedSame: NSLog(@"%@ == %@", str18, str19); break; case NSOrderedDescending: NSLog(@"%@ > %@", str18, str19); break; default: break; } NSLog(@"%ld", n);

    // 不區分大小寫比較 caseInsensitiveCompare:

     - (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
     NSComparisonResult 傳回值同上,為枚舉值

NSComparisonResult m = [str11 caseInsensitiveCompare:str12];NSLog(@"%ld", m);  // 輸出 0 表示str11和str12相同,不區分大小寫,複合實際情況

 

 

 NSMutableString

  NSMutableString 可變字串,繼承自NSString,所以 NSMutableString 可以用它父類所有的執行個體變數和方法,該類建立的字串是一個可變字串,可以支援增刪查改等動態操作.一般在項目開發中鼓勵使用NSMutableString類

  1. 執行個體對象的產生和初始化  initWithCapacity:

    便利構造器方法          stringWithCapacity:

NSMutableString *mStr = [[NSMutableString alloc] initWithCapacity:0];
NSMutableString *mStr1 = [[NSMutableString stringWithCapacity:0];

  初始化一個NSMutableString類型的對象,Capacity 容量的意思,指明了要被初始化的NSMutableString對象的大小. NSMutableString的對象會隨著字串的變化而自動擴充記憶體,如果存放的內容小於這個空間,則可以直接放入,如果大於虛擬空間就繼續開闢新的空間.

  2. 可變字串的快捷建立方式  .mutableCopy

NSMutableString *mStr3 = @"i am a good student".mutableCopy;   //mutableCopy將常量區的內容拷貝一份放到堆區

  3.追加字串

  在末尾追加一個字串        appendString:

  在末尾追加一個格式化字串   appendFormat:

NSMutableString *mutalbeStr = [NSMutableString stringWithFormat:@"My age is 10 "];[mutalbeStr appendString:@"11 12"]; // appendString方法沒有傳回值,說明是直接在str字串後面進行拼接NSLog(@"%@",mutalbeStr); // 列印:My age is 10 11 12// 不可變數組中也提供了拼接的方法,我們不妨對比下:NSString *str = [NSString stringWithFormat:@"My age is 10 "];NSString *str2 = [str stringByAppendingString:@"11 12"];NSLog(@"%@",str2);    // 列印:My age is 10 11 12

  可以看出:NSString一旦定義了str字串它本身就不可變了,雖然NSString類方法也提供了拼接的方法如stringByAppendString方法但是它返回的是一個新的字串。而NSMutableString提供的拼接方法appendString方法是在原有的字串上直接拼接它沒有傳回值。這就是可變和不可變字串的本質

  4. 插入字串的方法 insertString: atIndex:

[mStr4 insertString:@"部落格園" atIndex:0];NSLog(@"%@", mStr4);

  5. 根據範圍刪除子串 deleteCharactersInRange:

// 建立一個表示範圍的結構體變數NSRange rang3 = NSMakeRange(0, 2);// 根據範圍刪除子串  deleteCharactersInRange:[(父串) deleteCharactersInRange:rang3];NSLog(@"%@", mStr2);

  6. 給字串對象賦值,將aString複製一份,將其設定為訊息接受者的內容    setString

  7. 關於大小寫

7.將字串的每個字元全部大寫  uppercaseString//將字串mStr3的每個字元都大寫NSString *upString = [mStr3 uppercaseString];//可以直調用方法,也可以使用點文法NSString *upString = mStr3.uppercaseString;  8. 將字串的每個字元全部小寫  lowercaseStringNSString *lowString = mStr3.lowercaseString;9. 將lowString的單詞的首字母都大寫 capitalizedString
NSString *capitonString = mStr3.capitalizedString;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.