iOS - OC NSString 字符串


前言

	@interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
	@interface NSMutableString : NSString

1、不可變字符串的創建

	// 直接創建不可變字符串
	/*
		在 OC 中,使用 @"XXX" 格式定義的字符串,是保存在常量區的,只要內容相同,內存地址就一致
	*/
	NSString *string1 = @"bei jing huan ying nin";
	    
	// 對象方法創建字符串
		
		NSString *string2 = [[NSString alloc] init];
		
		// 用另一個字符串初始化當前字符串,和 string1 的地址相同
		NSString *string3 = [[NSString alloc] initWithString:string1];

		// 通過格式化控制初始化字符串
		NSString *string4 = [[NSString alloc] initWithFormat:@"age is %d, name is %@", 18, @"chen chao"];
	    
	// 類方法創建字符串
		
		NSString *string5 = [NSString string];
		
		// 用另一個字符串初始化當前字符串,和 string1 的地址相同
		NSString *string6 = [NSString stringWithString:string1];
	
		// 通過格式化控制初始化字符串
		NSString *string7 = [NSString stringWithFormat:@"age is %d, name is %@", 18, @"chen chao"];
		    
	// 由 C 語言的字符串創建字符串
	NSString *string8 = [[NSString alloc] initWithCString:"bei jing nin hao" encoding:NSUTF8StringEncoding];
	NSString *string9 = [[NSString alloc] initWithUTF8String:"bei jing huan ying nin"];
	    
	NSString *string10 = [NSString stringWithCString:"bei jing nin hao" encoding:NSUTF8StringEncoding];
	NSString *string11 = [NSString stringWithUTF8String:"bei jing huan ying nin"];
	    
	// 從 文件 創建字符串
	NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];
	    
	NSString *string12 = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
	NSString *string13 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
	    
	// 從 Url 創建字符串
	NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
	    
	NSString *string14 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];
	NSString *string15 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];

2、字符串長度計算

	NSString *str1 = @"zhou dong yu";

	// 計算字數長度,不是字符長度
	NSUInteger length = [str1 length];

3、字符串成員的引用(取字符)

	NSString *str1 = @"zhou dong yu";
	    
	// 取第 4 個字符
	unichar character = [str1 characterAtIndex:3];

4、字符串的拼接

	NSString *str1 = @"chen chao ";
	NSString *str2 = @"shuai";
	    
	// stringByAppendingString
	NSString *str3 = [str1 stringByAppendingString:str2];
	    
	// stringByAppendingFormat
	NSString *str4 = [str1 stringByAppendingFormat:@"%@", str2];

5、字符串比較

	NSString *str1 = @"chen chao";
	NSString *str2 = @"CHEN CHAO";
	    
	// isEqualToString
		
		BOOL bl = [str1 isEqualToString:str2];
		    
		if (bl) {
		    
			// 相等
			NSLog(@"str1 = str2");
		}
		else {
		    
			// 不等
			NSLog(@"str1 != str2");
		}
    
	// compare
		
		NSComparisonResult result1 = [str1 compare:str2];
		    
		if (result1 == NSOrderedAscending) {

			// 小於   -1
			NSLog(@"str1 < str2");
		}
		else if (result1 == NSOrderedSame){
			
			// 等於   0
			NSLog(@"str1 = str2");
		}
		else{
			
			// 大於   1   NSOrderedDescending
			NSLog(@"str1 > str2");
		}
    
	// caseInsensitiveCompare
	    
		// 忽略大小寫比較
		    
		NSComparisonResult result2 = [str1 caseInsensitiveCompare:str2];
		    
		if (result2 == NSOrderedAscending) {
			
			// 小於   -1
			NSLog(@"str1 < str2");
		}
		else if (result2 == NSOrderedSame){
			
			// 等於   0
			NSLog(@"str1 = str2");
		}
		else{
			
			// 大於   1   NSOrderedDescending
			NSLog(@"str1 > str2");
		}

6、字符串前綴和后綴的判斷

	NSString *fileName = @"file.txt";
	    
	// 前綴
	BOOL bl1 = [fileName hasPrefix:@"file"];
	    
	// 后綴
	BOOL bl2 = [fileName hasSuffix:@".txt"];

7、字符串大小寫字符的轉換

	NSString *str = @"chEN Chao";
	    
	// 轉大寫
	NSString *str1 = [str uppercaseString];
	   	
	// 轉小寫
	NSString *str2 = [str lowercaseString];
	
	// 單詞首字母大寫
	NSString *str3 = [str capitalizedString];

8、字符串轉數字

	NSString *str = @"12306";
	    
	int intValue = [str intValue];
	   	
	double doubleValue = [str doubleValue];
	   	
	float floatValue = [str floatValue];
	   	
	BOOL boolValue = [str boolValue];
	   	
	NSInteger integerValue = [str integerValue];
	   	
	long long longLongValue = [str longLongValue];

9、在字符串中查找子串的位置

	NSString *str1 = @"bei jing nin hao nin hao";
	NSString *str2 = @"ninn";
	    
	// 1、從前往后查找,找到第一個即停止查找
		    
		NSRange range1 = [str1 rangeOfString:str2];
		    
		// 或者 if(range1.length == 0)
		if (range1.location == NSNotFound) {
		                                                             
			NSLog(@"沒有找到 %@", NSStringFromRange(range1));
		}
		else{
		    
			// location 位置,length 長度
			NSLog(@"%lu %lu", range1.location, range1.length);
		}
	    
	// 2、條件查找
		    
		/*
			NSCaseInsensitiveSearch = 1,   // “A”等同於“a”,不分大小寫查找
			NSLiteralSearch = 2,           // Unicode 的點對點比較。它只在所有字符都用相同的方式組成的情況下才會返回相等。
			NSBackwardsSearch = 4,         // 在字符串的末尾開始反向搜索
			NSAnchoredSearch = 8,          // 只考慮搜索的起始點(單獨使用)或終止點(當與 NSBackwardsSearch 結合使用時)。
			                                  這個方法可以用來檢查前綴或者后綴,以及大小寫不敏感(case-insensitive)或者
			                                  音調不敏感(diacritic-insensitive)的比較。
			                                  
			NSNumericSearch = 64,          // 它對字符串里的數字排序
			 
			NSDiacriticInsensitiveSearch = 128,   // “A” 等同於 “Å” 等同於 “Ä.”
			NSWidthInsensitiveSearch = 256,       // 一些東亞文字(平假名和片假名)有全寬與半寬兩種形式
			NSForcedOrderingSearch = 512,
			NSRegularExpressionSearch = 1024      // 使用正則表達式搜索
		*/
		    
		// 從后往前查找,找到第一個即停止查找
		NSRange range2 = [str1 rangeOfString:str2 options:NSBackwardsSearch];
		    
		if (range2.location == NSNotFound) {
			NSLog(@"沒有找到 %@", NSStringFromRange(range2));
		} else {
			NSLog(@"%lu %lu", range2.location, range2.length);
		}
	    
	// 3、在某個范圍內查找
		    
		// 查找范圍
		NSRange range = {8, 10};
		    
		NSRange range3 = [str1 rangeOfString:str2 options:NSCaseInsensitiveSearch range:range];
		    
		if (range3.location == NSNotFound) {
			NSLog(@"沒有找到 %@", NSStringFromRange(range3));
		} else {
			NSLog(@"%lu %lu", range3.location, range3.length);
		}

10、字符串子串的提取(取子串)

	NSString *str = @"今天天氣真不錯,是風和日麗的,我們下午沒有課,是心情也不錯";
	  	
	// 從某個位置開始到結尾
	NSString *str1 = [str substringFromIndex:17];

	// 從開始到某個位置
	NSString *str2 = [str substringToIndex:7];

	// 某個范圍內
	NSRange range = {7, 10};
	NSString *str3 = [str substringWithRange:range];
	   	
	NSRange range1 = [str rangeOfString:@"我們下午沒有課"];
	NSString *str4 = [str substringFromIndex:range1.location];

11、字符串切割/組合

	NSString *str1 = @"chen$chao$ni$hao$ma";
	NSString *str2 = @"bei$jing#ni@hao&ma";
	NSString *str3 = @"Users/JHQ0228/Desktop";
	  	
	// 字符串 按照字符 切割
	NSArray *arr1 = [str1 componentsSeparatedByString:@"$"];
	   	
	// 字符串 按照字符集 切割
	NSArray *arr2 = [str2 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"$#@&"]];
	   	
	// 將字符串 路徑分割
	/*
		自動按照 "/" 分割字符串
	*/
	NSArray *arr3 = [str3 pathComponents];
	   	
	// 字符串 組合
	NSString *str4 = [arr1 componentsJoinedByString:@" "];
	NSString *str5 = [arr2 componentsJoinedByString:@" "];
	   	
	// 字符串 路徑組合
	/*
		將數組中的元素自動組合成路徑,在每個元素之間自動加上 “/”
	*/
	NSString *str6 = [NSString pathWithComponents:arr3];

12、可變字符串的創建

    // 不可變字符串中有的方法
	    
	    NSMutableString *str1 = [[NSMutableString alloc] init];
	    
	    // 和 str1 的地址不同
	    NSMutableString *str2 = [[NSMutableString alloc] initWithString:str1];
	
	    // 和 str1 的地址不同
	    NSMutableString *str3 = [NSMutableString stringWithString:str1];
	 	
    // 對象方法創建
    /*
    	創建指定長度字符串,預先分配存儲空間,提高效率,字符串實際長度可大於指定的長度
    */
    NSMutableString *str4 = [[NSMutableString alloc] initWithCapacity:0];
    
    // 類方法創建
    /*
    	創建指定長度字符串,預先分配存儲空間,提高效率,字符串實際長度可大於指定的長度
    */
    NSMutableString *str5 = [NSMutableString stringWithCapacity:0];

13、字符串的添加

	NSMutableString *str = [NSMutableString stringWithCapacity:0];
	    
	// 追加
	[str appendString:@"bei jing"];
	  	
	// 格式化追加
	[str appendFormat:@", age is %d", 18];
	   	
	// 插入
	[str insertString:@" ren min" atIndex:8];

14、字符串修改(覆蓋重寫)

	NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"我是大大的好人"];
	  	
	// 修改整個字符串(覆蓋重寫)
	[str setString:@"bei jing huan ying nin"];

15、字符串的刪除

	NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];
	   	
	NSRange range = [str rangeOfString:@"ren min "];
	[str deleteCharactersInRange:range];

16、字符串替換

	NSMutableString *str1 = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];

	// 替換字符串
	[str1 replaceCharactersInRange:[str1 rangeOfString:@"huan ying nin"] withString:@"ni hao ma"];

	// 查找並替換字符串
	[str1 replaceOccurrencesOfString:@"i" withString:@"X" options:NSLiteralSearch range:NSMakeRange(0, [str1 length])];
	
	/*
		NSCaseInsensitiveSearch = 1,         // “A”等同於“a”,不分大小寫查找
		NSLiteralSearch = 2,                 // Unicode 的點對點比較。它只在所有字符都用相同的方式組成的情況下才會返回相等。
		NSBackwardsSearch = 4,               // 在字符串的末尾開始反向搜索
		NSAnchoredSearch = 8,                // 只考慮搜索的起始點(單獨使用)或終止點(當與 NSBackwardsSearch 結合使用時)。
		                                        這個方法可以用來檢查前綴或者后綴,以及大小寫不敏感(case-insensitive)或者
		                                        音調不敏感(diacritic-insensitive)的比較。
		NSNumericSearch = 64,                // 它對字符串里的數字排序
		NSDiacriticInsensitiveSearch = 128,  // “A” 等同於 “Å” 等同於 “Ä.”
		NSWidthInsensitiveSearch = 256,      // 一些東亞文字(平假名和片假名)有全寬與半寬兩種形式
		NSForcedOrderingSearch = 512,
		NSRegularExpressionSearch = 1024     // 使用正則表達式搜索
	*/

17、字符串的導出

	// 文件路徑
	NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/string.txt"];
	
	// 待導出字符串
	NSString *str = @"bei jing ni hao";
	    
	// 導出字符串
		
	/*
		- (BOOL)writeToFile:(NSString *)path 
		         atomically:(BOOL)useAuxiliaryFile 
		           encoding:(NSStringEncoding)enc 
		              error:(NSError **)error;
		
		atomically:原子性,
						YES:原子性操作,數據寫入文件時先寫入臨時文件,待數據全部寫入臨時文件后,再創建並將數據
						     從臨時文件全部剪切到目標文件中。若寫入過程中(指往臨時文件中寫入)發生錯誤,會刪除臨時文件。
		            	NO:非原子性操作,數據寫入文件時直接創建並寫入目標文件。
		                    若寫入過程中發生錯誤,會停止寫入,不會刪除目標文件,並且不會刪除已寫入的數據。
		error:錯誤數據。error == nil 時寫入成功。
		
		文件不存在時會自動創建,文件夾不存在時會寫入錯誤。
	*/
	    
	// 不判斷是否寫入成功
	    
	[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
	    
	// 判斷是否寫入成功
	    
	NSError *error;
	    
	[str writeToFile:[NSHomeDirectory() stringByAppendingString:@"/Desktop/str/string.txt"] 
	                                                 atomically:YES encoding:NSUTF8StringEncoding 
	                                                      error:&error];
	    
	if (error) {
	    
	NSLog(@"寫入失敗:%@", error);
	    
		// 打印主要錯誤信息
		NSLog(@"寫入失敗:%@", [error localizedDescription]);
	} else {
		NSLog(@"寫入成功");
	}

18、OC 字符串與 C 字符串的相互轉換

	// OC 字符串轉 C 字符串
	const char *CString = [@"bei jing ni hao" UTF8String];
		
	// C 字符串轉 OC 字符串
	NSString *OCString1 = [[NSString alloc] initWithCString:"ni hao" encoding:NSUTF8StringEncoding];
	NSString *OCString2 = [[NSString alloc] initWithUTF8String:"ni hao"];
	    
	NSString *OCString3 = [NSString stringWithCString:"ni hao" encoding:NSUTF8StringEncoding];
	NSString *OCString4 = [NSString stringWithUTF8String:"ni hao"];

19、NSString 與 NSData 的相互轉換

	NSString *string = @"bei jing nin hao";
	  	
	// NSString 轉 NSData
	NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
	
	// data 類型數據以十六進制的形式打印出
	NSLog(@"%@", data);
	
	// data 類型數據以字符串的形式打印出
	NSLog(@"%s", data.bytes);
	    
	// NSData 轉 NSString
	NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

20、NSString 與 NSNumber 的相互轉換

	NSNumber *num1 = @10.456;
	    
	// NSNumber 轉換 NSString
	NSString *str = [num1 stringValue];
	 	
	// NSString 轉 NSNumber
	NSNumber *num2 = [NSNumber numberWithFloat:[str floatValue]];

21、NSString 與 NSDate 的相互轉換

	NSDateFormatter *dfm = [[NSDateFormatter alloc] init];
	dfm.dateFormat = @"yyyy年MM月dd日 HH點mm分ss秒";
	dfm.locale = [NSLocale localeWithLocaleIdentifier:@"GMT+8"];
	    
	// NSString 轉 NSDate
	NSDate *date = [dfm dateFromString:@"2016年05月24日 17點38分03秒"];
	  	
	// NSDate 轉 NSString
	NSString *str = [dfm stringFromDate:date];

22、NSString 與 Class 的相互轉換

	// NSString 轉 Class
	Class ClassName = NSClassFromString(@"Student");
	    
	Student *stu = [[ClassName alloc] init];
	[stu studentTest];
	    
	// Class 轉 NSString
	NSString *strintFromClass = NSStringFromClass([Student class]);

23、NSString 與 方法名 的相互轉換

	// NSString 轉 方法名
	SEL selName = NSSelectorFromString(@"studentTest");
	    
	// 消除 performSelector: 方法警告
	#pragma clang diagnostic push
	
	#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
	    
	Student *stu = [[Student alloc] init];
	[stu performSelector:selName];
	    
	#pragma clang diagnostic pop
	    
	// 方法名 轉 NSString
	NSString *stringFromSel = NSStringFromSelector(@selector(studentTest));

24、NSString 與 NSProtocol 的相互轉換

	// NSString 轉 NSProtocol
	Protocol *ptlName = NSProtocolFromString(@"NSCopying");
	    
	Student *stu = [[Student alloc] init];
	BOOL conforms = [stu conformsToProtocol:ptlName];
	    
	// NSProtocol 轉 NSString
	NSString *stringFromProtocol = NSStringFromProtocol(@protocol(NSCopying));

25、NSString 與 NSRange 的相互轉換

	NSRange range4 = NSMakeRange(9, 4);
	    
	// NSRange 轉 NSString
	NSString *stringFronRange = NSStringFromRange(range4);
	   	
	// NSString 轉 NSRange
	NSRange range5 = NSRangeFromString(stringFronRange);

26、NSString 與 NSPoint 的相互轉換

	NSPoint point5 = NSMakePoint(9, 4);
	    
	// NSPoint 轉 NSString
	NSString *stringFronPoint = NSStringFromPoint(point5);
	 
	// NSString 轉 NSPoint
	NSPoint point6 = NSPointFromString(stringFronPoint);

27、NSString 與 NSSize 的相互轉換

	NSSize size5 = NSMakeSize(9, 4);
	    
	// NSSize 轉 NSString
	NSString *stringFronSize = NSStringFromSize(size5);
	  	
	// NSString 轉 NSSize
	NSSize size6 = NSSizeFromString(stringFronSize);

28、NSString 與 NSRect 的相互轉換

	NSRect rect5 = NSMakeRect(9, 4, 4, 9);
	    
	// NSRect 轉 NSString
	NSString *stringFronRect = NSStringFromRect(rect5);
	  	
	// NSString 轉 NSRect
	NSRect rect6 = NSRectFromString(stringFronRect);

29、生成隨機數

	// 生成 15 位長度的數字字母組合的隨機數
	- (NSString *)generateTradeNO {
		    
		static int kNumber = 15;
			
		NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		NSMutableString *resultStr = [[NSMutableString alloc] init];
		srand((unsigned)time(0));
		for (int i = 0; i < kNumber; i++)
		{
			unsigned index = rand() % [sourceStr length];
			NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
			[resultStr appendString:oneStr];
		}
		    
		return resultStr;
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM