oc 基本基础类型之NSString
NSString :字符串对象
字符串的创建:
//创建字符串 NSString *op= @"jack"; NSLog(@"%@",op); // NSString *op1= [[NSString alloc] init];//一旦初始化则不可变 所以该字符串是空字符串对象 // NSString *op2= [NSString string];//调用类方法 无拥有权 // NSString *op = [NSString new]; //已经知道一个字符串对象 需要用这个字符串对象创建一个新的 NSString *pwd = @"123"; NSString *p2 = [[NSString alloc]initWithString:pwd ]; //NSString *pwd2 = [NSString stringWithString:pwd]; 该代码块对其无拥有权 // NSString *op3 = [[NSString alloc] initWithFormat:@" %@",op]; // NSString *op3 = [NSString stringWithFormat:@"%@",op]; NSLog(@"%@ %@",pwd,p2);
管理字符串的相关操作:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //length:计算字符串的长度 NSString*p=@"asbaska"; NSUInteger a=p.length; //NSUInteger b = [p length]; NSLog(@"字符串的长度是%lu",a);//输出:7 // - (unichar)characterAtIndex:(NSUInteger)index; :获取index对应的字符 char c = [p characterAtIndex:0];//以字符数组处理 位置从0开始 NSLog(@"该位置对应的字符是%c",c);//输出:a //substring:可以认为是子字符串 // - (NSString *)substringFromIndex:(NSUInteger)from;从index这个位置开始的子字符串(包括该位置) NSString *name = @"abcde hyt xmy"; NSLog(@"%@",[name substringFromIndex:6]);//输出:hyt xmy // - (NSString *)substringToIndex:(NSUInteger)to;从开始到index之间的子字符串(不包括该位置) NSString *name1=@"hyt xmy abcde"; NSLog(@"%@",[name1 substringToIndex:7]);//输出:hyt xmy //- (NSString *)substringWithRange:(NSRange)range;获取某一范围的子字符串 // typedef struct _NSRange { // NSUInteger location;当前位置 // NSUInteger length;字符串的长度 // } NSRange; NSString *name2=@"abcd hytxmy efgh"; NSRange range = NSMakeRange(5, 6); NSLog(@"%@",[name2 substringWithRange:range]);//输出:hytxmy //- (NSComparisonResult)compare:(NSString *)string;两个字符串比大小 // typedef NS_CLOSED_ENUM(NSInteger, NSComparisonResult) { // NSOrderedAscending = -1L, 升序 // NSOrderedSame, 相等 // NSOrderedDescending 降序 // }; NSString *str1=@"aB"; NSString *str2 = @"ab"; NSInteger ta = [str1 compare:str2]; if (ta == NSOrderedAscending) { NSLog(@"str1<str2"); }else if(ta == NSOrderedSame){ NSLog(@"str1 = str2"); }else{ NSLog(@"str1>str2"); }//输出:str1<str2 // 字符串比较是否相同:isEqualToString NSString *str3 = @"ab"; if ([str2 isEqualToString:str3]) { NSLog(@"the same"); }else{ NSLog(@"different"); }//输出:the same //- (BOOL)hasPrefix:(NSString *)str;字符串是否有前缀 NSString *st =@"https www.com abc"; if ([st hasPrefix:@"https"]) { NSLog(@"https协议"); }else{ NSLog(@"非https协议"); }//输出:https协议 //- (BOOL)hasSuffix:(NSString *)str;字符串是否有后缀 NSString *st1 =@"https www.com png"; if ([st1 hasSuffix:@"png"]) { NSLog(@"是png格式图片"); }//是png图片 //- (BOOL)containsString:(NSString *)str API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));判断一个字符串是否包含另一个字符串 NSString *st2=@"png"; if ([st1 containsString:st2]) { NSLog(@"png 图片"); }//输出:png图片 //- (NSRange)rangeOfString:(NSString *)searchString;获取一个字符串在某一个字符串的具体位置(被判断位置的字符串写在后面) NSRange range1=[st1 rangeOfString:st2]; NSLog(@"%lu %lu",range1.location,range1.length);//输出:14 3 // - (NSString *)stringByAppendingString:(NSString *)aString;在某个字符串后面追加一个字符串形成一个新的字符串对象 NSString *bookname=@"资本论"; NSString *newname=[bookname stringByAppendingString:@"读后感"]; NSLog(@"%@",newname);//输出:资本论读后感 // - (NSString *)stringByAppendingFormat:(NSString *)format, ...在某个字符串后面追加一个一定格式的字符串形成一个新的字符串对象 int count = 2; NSString *newname2=[bookname stringByAppendingFormat:@"读后感%d",count]; NSLog(@"%@",newname2);//输出:资本论读后感2 //@property (readonly) int intValue; 将字符串转换成整型 NSString *str = @"123a"; NSString *stra = @"abc"; NSLog(@"%d",str .intValue);//输出:123 NSLog(@"%f",str .floatValue);//输出:123.000000 NSLog(@"%d",stra.intValue);//输出:0 如果消息的接收者(stra,这是OC中的叫法)不是以有效的十进制符号开头来表示一个数字,就会返回 0. } return 0; }
可变字符串:
// NSMutableString可变字符串 // @interface NSMutableString : NSString 继承于NSString NSMutableString *op2=[NSMutableString string]; // NSMutableString *op1=[[NSMutableString alloc]initWithCapacity:6 ]; // NSMutableString *ad = [NSMutableString stringWithCapacity:6]; //字符串拼接 [op2 appendString:@"jack"]; [op2 appendString:@" and rose"]; NSLog(@"%@",op2);//输出:jack and rose [op2 appendFormat:@"%d",count]; NSLog(@"%@",op2);//输出:jack and rose2 //插入:从当前位置开始插 [op2 insertString:@"er" atIndex:4]; NSLog(@"%@",op2);//输出:jacker and rose2 //取代 NSRange range3 = [op2 rangeOfString:@"rose"]; [op2 replaceCharactersInRange:range3 withString:@"merry"]; NSLog(@"%@",op2);//输出:jacker and merry2 //删除 [op2 deleteCharactersInRange:range3]; NSLog(@"%@",op2);//输出:jacker and y2 //整个替换 [op2 setString:@"mike"]; NSLog(@"%@",op2);//输出:mike [op2 setString:@""];//相当于清空 NSLog(@"%@",op2);//输出:
对于property属性copy 以及它修饰的类NSString的理解:
NSString *t1 = [[NSString alloc] initWithString:@"xmy"]; NSString *t2 = t1;//标号a // NSString *t2=[t1 copy];//标号b NSLog(@"%p %p",t1,t2);//a,b输出的内存地址均相同 此为copy对NSString的浅拷贝 并非真正意思上的拷贝 NSMutableString *t3 = [[NSMutableString alloc]initWithString:@"xmy"]; //NSMutableString *t4 = t3;//标号a NSString *t4=[t3 copy];//标号b [t3 setString:@"hyt"]; NSLog(@"%@",t4);//a输出:hyt b输出:xmy NSLog(@"%p %p",t3,t4);//a输出的地址相同 b输出的地址不同 此为copy对NSMutableString的深拷贝 是真正意义上的拷贝 //copy属性修饰字符串是的对象更加安全 故采用copy修饰它 //NSMutableString的对象用copy修饰之后 会变为NSString类