zoukankan      html  css  js  c++  java
  • iOS

    前言

    	@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;
    	}
    
  • 相关阅读:
    String类源码解析之理解indexOf函数--转载
    SQL优化--转载
    通过cmd/批处理 开启关闭windows中的mysql数据库
    windows查看连接过wifi的密码
    Java Annotation认知(包括框架图、详细介绍、示例说明)--转载
    springboot加载配置文件的优先级
    SpringBoot项目创建的三种方式
    雷总小米十周年演讲---国外友人评价第一次看到MIUI系统
    装饰器模式
    嵌套的setTimeout
  • 原文地址:https://www.cnblogs.com/QianChia/p/5782672.html
Copyright © 2011-2022 走看看