字符串算是OC中很是重要和經常使用的一部份內容,OC中的字符串與我以前在學習C,C++,Java中的字符串有必定的不一樣,它很是相似於C++中容器的概念,但用法卻與之仍是有很大的不一樣,也許是由於OC的語法就與其餘咱們經常使用的編程語言不盡相同。ios
這裏總結一下字符串NSString與NSMutableString。編程
一. NSStringapp
NSString表明字符序列不可變的字符串,NSString的功能很是強大,OC的字符串處理比C語言的餓字符串簡單、易用得多。編程語言
這裏咱們經過一個具體的例子來進行分析。ide
建立兩個字符串對象: 學習
NSString *str1 = @"this is string A"; NSString *str2 = @"this is string B";
計算字符串中的字符個數:測試
NSLog(@"Length of str1 : %lu" , [str1 length]);
利用stringWithString 將一個字符串複製到另外一個字符串:this
res = [NSString stringWithString : str1]; NSLog(@"copy : %@" , res);
stringByAppendingString,將一個字符串複製到另外一個字符串的末尾:spa
str2 = [str1 stringByAppendingString:str2];
isEqualToNumber : 方法比較兩個NSNumber對象的數值。程序會返回一個BOOL值,查看這兩個值是否相等。3d
isEqualToString,判斷兩個字符串是否相等:
if([str1 isEqualToString: res] == YES) NSLog(@"str1 == res"); else NSLog(@"str1 != res");
compare : 方法測試一個值是否在數值上小於、等於或大於另外一個值。
如: [intNumber compare : myNumber]
若intNumber 小於 myNumber ,返回NSOrderedAscending ;
相等 ,返回NSOrderdSame;
大於 ,返回NSOrderdDescending
//驗證一個字符串是否小於、等於或大於另外一個字符串 compareResult = [str1 compare: str2]; if(compareResult == NSOrderedAscending) NSLog(@"str1 < str2"); else if(compareResult == NSOrderedSame) NSLog(@"str1 == str2"); else NSLog(@"str1 > str2");
uppercaseString,將字符串轉換爲大寫。
lowercaseString,將字符串轉換爲小寫。
//將字符串轉換爲大寫 res = [str1 uppercaseString]; //將字符串轉換爲小寫 res = [str1 lowercaseString];
示例代碼以下:
1 // 2 // main.m 3 // stringTest 4 // 5 // Created by heyonggang on 13-12-4. 6 // Copyright (c) 2013年 MiracleHe. All rights reserved. 7 // 基本的字符串操做 8 9 #import <Foundation/Foundation.h> 10 11 int main(int argc, const char * argv[]) 12 { 13 14 @autoreleasepool { 15 16 // insert code here... 17 //NSLog(@"Hello, World!"); 18 NSString *str1 = @"this is string A"; 19 NSString *str2 = @"this is string B"; 20 NSString *res; 21 NSComparisonResult compareResult; 22 23 //計算字符串中的字符 24 NSLog(@"Length of str1 : %lu" , [str1 length]); 25 26 //將一個字符串複製到另外一個字符串 27 res = [NSString stringWithString : str1]; 28 NSLog(@"copy : %@" , res); 29 30 //將一個字符串複製到另外一個字符串的末尾 31 str2 = [str1 stringByAppendingString:str2]; 32 NSLog(@"concatentation: %@" , str2); 33 34 //驗證兩個字符串是否相等 35 if([str1 isEqualToString: res] == YES) 36 NSLog(@"str1 == res"); 37 else 38 NSLog(@"str1 != res"); 39 40 //驗證一個字符串是否小於、等於或大於另外一個字符串 41 compareResult = [str1 compare: str2]; 42 43 if(compareResult == NSOrderedAscending) 44 NSLog(@"str1 < str2"); 45 else if(compareResult == NSOrderedSame) 46 NSLog(@"str1 == str2"); 47 else 48 NSLog(@"str1 > str2"); 49 50 //將字符串轉換爲大寫 51 res = [str1 uppercaseString]; 52 NSLog(@"uppercase conversion : %s" , [res UTF8String]); 53 54 //將字符串轉換爲小寫 55 res = [str1 lowercaseString]; 56 NSLog(@"lowercase conversion : %@" , res); 57 58 NSLog(@"original string : %@" , str1); 59 } 60 return 0; 61 }
stringByAppendingString,在字符串後面添加固定的字符串:
str = [str stringByAppendingString:@", iOS!"];
substringToIndex,獲取str的前10個字符組成的字符串:
substringToIndex:方法建立了一個子字符串,包括首字符都指定的索引數,但不包括這個字符。由於索引數是從0開始的,因此參數3表示從字符串中提取0、一、2,並返回結果字符串對象。對於全部採用索引數做爲參數的字符串方法,若是提供的索引數對該字符串無效,就會得到Range or index out of bounds的出錯信息。
//獲取str的前10個字符組成的字符串 NSString *s1 = [str substringToIndex:10]; NSLog(@"%@" , s1);
substringFromIndex,獲取str從第5個字符開始,與後面字符組成的字符串:
//獲取str從第5個字符開始,與後面字符組成的字符串 NSString *s2 = [str substringFromIndex:5]; NSLog(@"%@" , s2);
獲取str從第5個字符開始,到第15個字符組成的字符串:
//獲取str從第5個字符開始,到第15個字符組成的字符串 NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)]; NSLog(@"%@" , s3);
rangeOfString , 獲取ios在str中出現的位置:
//獲取iOS在str中出現的位置 NSRange pos = [str rangeOfString:@"iOS"]; NSLog(@"ios在str中出現的開始位置:%ld , 長度爲:%ld" , pos.location , pos.length);
示例代碼以下:
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 8 NSString *str = @"Hello "; 9 NSString *book = @"我要學好iOS"; 10 11 //在str後面追加固定的字符串 12 //原來的字符串對象並不改變,只是將新生成的字符串從新賦給str指針變量 13 str = [str stringByAppendingString:@", iOS!"]; 14 NSLog(@"%@" , str); 15 16 //獲取字符串對應的C風格字符串 17 const char *cstr = [str UTF8String]; 18 NSLog(@"獲取的c字符串:%s" , cstr); 19 20 //在str後面追加帶變量的字符串 21 //原來的字符串對象並不改變,只是將新生成的字符串從新賦給str指針變量 22 str = [str stringByAppendingFormat:@"%@是很是重要的事情。" , book]; 23 NSLog(@"%@" , str); 24 NSLog(@"str的字符個數:%lu" , [str length]); 25 26 //獲取str的前10個字符組成的字符串 27 NSString *s1 = [str substringToIndex:10]; 28 NSLog(@"%@" , s1); 29 30 //獲取str從第5個字符開始,與後面字符組成的字符串 31 NSString *s2 = [str substringFromIndex:5]; 32 NSLog(@"%@" , s2); 33 34 //獲取str從第5個字符開始,到第15個字符組成的字符串 35 NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)]; 36 NSLog(@"%@" , s3); 37 38 //獲取iOS在str中出現的位置 39 NSRange pos = [str rangeOfString:@"iOS"]; 40 NSLog(@"ios在str中出現的開始位置:%ld , 長度爲:%ld" , pos.location , pos.length); 41 42 } 43 return 0; 44 }
二. NSMutableString
NSMutableString對象表明一個字符序列可變的字符串,並且NSMutableString是NSString的子類,所以前面介紹的NSString所包含的方法,NSMutableString均可以直接使用,NSMutableString對象也可直接當成NSString對象使用。
stringWithString,用不可變字符串建立可變字符串:
//從不可變字符串建立可變字符串 mstr = [NSMutableString stringWithString:str1]; NSLog(@"%@" , mstr);
insertString,插入字符:
//插入字符 [mstr insertString:@"mutable" atIndex:7]; NSLog(@"%@" , mstr);
insertString: atIndex: ,插入末尾進行有效拼接:
//插入末尾進行有效拼接 [mstr insertString:@" and string B" atIndex:[mstr length]]; NSLog(@"%@" , mstr);
deleteCharactersInRange:NSMakeRange() , 根據範圍刪除子字符串:
//根據範圍刪除子字符串 [mstr deleteCharactersInRange: NSMakeRange(16, 13)]; NSLog(@"%@" , mstr);
查找而後直接刪除:
//查找而後將其刪除 substr = [mstr rangeOfString:@"string B and "]; if(substr.location != NSNotFound){ [mstr deleteCharactersInRange:substr]; NSLog(@"%@" , mstr); }
示例代碼以下:
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 8 // insert code here... 9 //NSLog(@"Hello, World!"); 10 11 NSString *str1 = @"this is string A"; 12 NSString *search , *replace; 13 NSMutableString *mstr; 14 NSRange substr; 15 16 //從不可變字符串建立可變字符串 17 mstr = [NSMutableString stringWithString:str1]; 18 NSLog(@"%@" , mstr); 19 20 //插入字符 21 [mstr insertString:@"mutable" atIndex:7]; 22 NSLog(@"%@" , mstr); 23 24 //插入末尾進行有效拼接 25 [mstr insertString:@" and string B" atIndex:[mstr length]]; 26 NSLog(@"%@" , mstr); 27 28 29 //直接使用appendString 30 [mstr appendString:@" and string C"]; 31 NSLog(@"%@" , mstr); 32 33 //根據範圍刪除子字符串 34 [mstr deleteCharactersInRange: NSMakeRange(16, 13)]; 35 NSLog(@"%@" , mstr); 36 37 //查找而後將其刪除 38 substr = [mstr rangeOfString:@"string B and "]; 39 40 if(substr.location != NSNotFound){ 41 [mstr deleteCharactersInRange:substr]; 42 NSLog(@"%@" , mstr); 43 } 44 45 46 //直接設置爲可變的字符串 47 [mstr setString:@"this is string A"]; 48 NSLog(@"%@" , mstr); 49 50 //替換一些字符 51 [mstr replaceCharactersInRange:NSMakeRange(8, 6) withString:@" a mutable string"]; 52 NSLog(@"%@" , mstr); 53 54 //查找和替換 55 search = @"this is"; 56 replace = @"an example of"; 57 58 substr = [mstr rangeOfString:search]; 59 60 if(substr.location != NSNotFound){ 61 [mstr replaceCharactersInRange:substr withString:replace]; 62 NSLog(@"%@" , mstr); 63 } 64 65 //查找和替換全部的匹配項 66 search = @"a"; 67 replace = @"X"; 68 69 substr = [mstr rangeOfString:search]; 70 71 while (substr.location != NSNotFound) { 72 [mstr replaceCharactersInRange:substr withString:replace]; 73 74 } 75 76 NSLog(@"%@" , mstr); 77 78 } 79 return 0; 80 }