Objective-C學習- 字符串類型 NSString 和 NSMutableString

  相比於C語言來說,通常面向對象的語言都有一種類型來專門的處理字符串類型,如C++的string,JAVA的String..  Objectiver-C 天然也有種類型來專門處理字符串,叫作NSString。數組

  

 

 

  Objective-C中的字符串也分爲兩種:NSString(不可變字符串),NSMutableString(可變字符串),NSMutableString類是NSString的一個子類。app

  注:Objective-C中的字符串 都須要用@"內容",前邊必需要用一個@spa

  (1)NSString--------不可變字符串指針

    

  //初始化   component

     NSString *str1 = @"123"//直接賦值orm

 

           NSString *str2 = [[NSString alloc] initWithFormat:str1];//根據字符串str1來建立字符串對象

      

    /*繼承

       這種方法也是根據字符串str1來建立字符串字符串

       可是與上方的定方法不一樣的是:用 stringWithFormat 方法建立的字符串被稱爲 臨時字符串string

       由於用這種方法建立的字符串會隨時釋放,在之後的iOS中,很難控制

       */   

      NSString *str3 = [NSString stringWithFormat:str1];//這表示字符串str3是根據str1創建的,至關於把str1的值賦給str3

      

   將C語言的字符數組或者字符指針轉換成NSString

      /*

       C語言中的字符數組char[]或者字符指針char *轉變成 NSString

       方法是: [[NSString alloc] initWithUTF8String:(const char *)]

      */  

      NSString *str4 = [[NSString alloc] initWithUTF8String:p];//將字符指針p轉換成NSString

    

   //字符串比較是否相等

      BOOL b = [str4 isEqualToString:str1];//返回YES(1)   NO(0)

 

      //字符串比較大小

    /*

       方法是:str1 compare:(NSString *),返回類型是 NSComparisonResult

       須要用NSComparisonResult來接收結果,該類型是一個枚舉

       枚舉的值是:

       NSOrderedSame:相等

       NSOrderedAsend:小於

       NSOrderedDescending:大於

       */

      NSComparisonResult result = [@"123" compare:@"123"]; //這是比較 字符串@「123」 和 字符串@「123」的大小

    

       //字符串中查找子串

    /*

       方法:str5 rangeOfString:(NSString *)

       該方法返回類型是 NSRage,該類型是一個結構體

       結構體的元素:

       location 表示位置

       length 表示長度

       */

    //下例表示在str5中查找子串@「my」,而且返回一個NSRange類型,從而獲取位置以及長度

      NSString *str5 = @"This is my Objective-C Project";

      NSRange range = [str5 rangeOfString:@"my"];

      int location = (int)range.location;    //location是接受@」my「str5中的位置(實際是下標)    

      int length = (int)range.length;    //length是長度

  

   //在字符串中提取字符串

     /*

       方法:[ str6 substringToIndex:(NSUInteger)]

       str6 中提取從第0位到第6位的字符串,生成新的字符串,返回地址

       注:此處的範圍是[0,6)(此範圍是下標範圍)

    str6 = @"0123456789";

    結果:str7 = @"012345"

       */

      NSString *str7 = [str6 substringToIndex:6];

    

 

      /*

        方法:[str6 substringFromIndex:(NSUInteger)]

       str6 中提取從弟6位到末尾的字符串,生成新的字符串,返回地址

       注:此處的範圍是[6,n];(此範圍是下標範圍)

     str6 = @"0123456789";

     結果是: str9 = @"6789";

       */

      NSString *str8 = [str6 substringFromIndex:6];

    

 

       /*

       方法:[str6 substringWithRange:(NSRange)]

       這個方法的含義是:截取從第NSRange.location個元素開始,截取長度是NSRange.length

       返回地址

    下例表示:從str6中 從第4個開始截取長度爲5個的字符串(依舊是下標來計數)

    範圍:[4,9)

       str6 = @"0123456789"

       str9 = @"45678"

       */

      NSString *str9 = [str6 substringWithRange:NSMakeRange(4, 5)];

 

 

  (2)NSMutableString-------可變字符串(由於 可變字符串  是繼承於不可變字符串 全部上述方法 可變字符串依舊能用,但初始化有一種是不能定義的,下面會說)

  

  //初始化:   

        NSMutableString *str1 = @"123456789";//這種代碼是錯誤的,不能這麼定義!!      

      NSMutableString *str1 = [[NSMutableString alloc] init];   

        [str1 setString:@"abc"];//給字符串str1設置值

 

 

   //字符串追加 

      /*

       方法:str1 appendString:(NSString *)]

       str1後面追加字符串

       */

      [str1 appendString:@"123"];

    

    //格式化追加

    [str1 appendFormat:@"%c",'Z'];

 

 

  //插入字符串

  /*

    方法:[str1 insertString:(NSString *) atIndex:(NSUInteger)]

  意思是將 字符串NSString 插入到 字符串str1的第 NSUInteger 個位置(一樣是相對於下標)

  str1 = @"0123456789";

  執行後:str1 = @"012345SSSSSS6789";

  */

  [str1 insertString:@"SSSSSS" atIndex:6];  //將字符串 @"SSSSSS" 插入到 字符串str1的第6個位置

 

  //這個方法與上面同樣,只不過在 insertString: 以後用的是一個經過格式化的新建立的NSString

      [str1 insertString:[NSString stringWithFormat:@"%d",-36] atIndex:6];

 

  //刪除字符串

        /*

      方法:[str1 deleteCharactersInRange:(NSRange)]

    NSRange是一個結構體,內有兩個成員變量

    location 表明開始的位置

    length 表明長度

    範圍(location ,location + length](下標)

      str1 = @"0123456789"; 

    結果:str1 = @"01289";

     */

      [str1 deleteCharactersInRange:NSMakeRange(3, 5)];  //將 str1 中的第4個元素開始刪除,刪除到第9(4+5)個(包括第9個)

  

 

  //修改字符串(替換字符串)

  /*

  方法:[str1 replaceCharactersInRange:(NSRange) withString:(NSString *)]

  NSRange是一個結構體,解釋看刪除字符串的解釋

  將 NSString 的字符串 替換 str1中的NSRange 的字符串

  str1 = @"0123456789";

  結果:str1 = @"012XXXXX56789"; 

  */  

    [ str1 replaceCharactersInRange:NSMakeRange(3, 2) withString:@"XXXXX"];//將 str1 的第3個(實際位第4個,由於是下標)開始,用字符串@"XXXXX"替換 2個長度的字符串

 

  //字符串與數據的應用

  例如:

  NSString *str = @"This is my OBjective-C Project!";

  NSArray *arr = [str componentsSeparatedByString:@" "];//意思是用空格來分割字符串,並將值存入數組

  NSString *str1 =[arr componentsJoinedByString:@" "];//意思是將數組用" "鏈接起來

相關文章
相關標籤/搜索