OC--NSString字符串
来源:互联网 发布:程序员培训全日制吗 编辑:程序博客网 时间:2024/04/30 06:42
在OC中核心处理字符串的类有NSString和NSMutableString两个类。NSString是不可变字符串,NSMutableString是可变字符串。这里的可变指的是可以动态修改长度和内容。
这里对NSString常用到的属性和方法做一下梳理。
1、创建
//静态创建字符串常量
NSString *string1 =@"啊啊啊啊啊";
//alloc创建空字符串对象
NSString *string2 = [[NSStringalloc]init];
//给对象赋值
string2 = @"啊啊啊啊啊";
OC是面向对象的开发语言,创建对象的语法是:类 *对象; 上面创建了一个不可变的字符串对象,并赋予了一个常量作为初始值,这就是一个常量字符串。
从对象的创建方式我们可以联想到C语言中的指针,那么这里创建的对象到底是什么呢?我们来看下内存地址就知道了,使用上面创建的对象,比较两个对象的内存地址。
//静态创建字符串常量
NSString *string1 =@"啊啊啊啊啊";
//alloc创建空字符串对象
NSString *string2 = [[NSStringalloc]init];
NSLog(@"string2赋值前的内存地址:%p", string2);
//给对象赋值
string2 = @"啊啊啊啊啊";
NSLog(@"string1的内存地址:%p", string1);
NSLog(@"string2赋值后的内存地址:%p", string2);
打印结果:
2017-03-17 10:23:32.507 OCdemo[938:52474] string2赋值前的内存地址:0x7fff7535dd20
2017-03-17 10:23:32.508 OCdemo[938:52474] string1的内存地址:0x1000020d0
2017-03-17 10:23:32.508 OCdemo[938:52474] string2赋值后的内存地址:0x1000020d0
Program ended with exit code: 0
从上面的代码和打印结果可以看出,在创建string1和string2两个字符串对象后,两个对象的地址不同,当给string2一个和string1相同的值得时候,两个对象的地址相同。其实,string1和string2存储的并不是字符串对象,它是指向内存中字符串对象的指针,它只是表示内存中的一个对象而不是保存。创建一个对象其实就是创建一个标识,也就是标识符。
2、属性&方法
字符串的长度属性
@property (readonly)NSUInteger length;
从声明来看,这是一个自读属性,因为NSString的长度是不能通过这个length属性来修改的。NSString *aString =@"123456789";
NSInteger len = aString.length;
NSLog(@"aString的长度%ld", (long)len);
NSLog(@"aString的长度%ld", [aString length]);
上面是创建一个字符串对象,并使用length属性打印字符串的长度,在OC中可以使用‘.语法’来直接使用属性,也可使用 ‘[]’方括号的方式。打印结果:
2017-03-17 10:35:45.777 OCdemo[955:57384] aString的长度9
2017-03-17 10:35:45.777 OCdemo[955:57384] aString的长度9
Program ended with exit code: 0
类型转换属性,也可以成为类型转换方法。使用下面这些属性,可以将string的类型做转变。
@property (readonly)double doubleValue; //转换成double类型的数字
@property (readonly)float floatValue; //转换为float类型数字
@property (readonly)int intValue; //转换成int类型数字
@property (readonly)NSInteger integerValueNS_AVAILABLE(10_5, 2_0); //转换成NSInteger类型数字
@property (readonly)longlong longLongValueNS_AVAILABLE(10_5, 2_0); //转换成长整型数字
@property (readonly)BOOL boolValueNS_AVAILABLE(10_5, 2_0); //转换成bool类型数据
从上面的介绍来看,string的转换都是转换为数字类型(bool也是0、1两个数字),转换大小写属性,使用下面的属性可以转换字符串的大小写。
@property (readonly,copy)NSString *uppercaseString; //转变成全部大写字符
@property (readonly,copy)NSString *lowercaseString; //转变成全部小写字符
@property (readonly,copy)NSString *capitalizedString; //转变成首字母大写
下面是一些常用方法:
创建一个空字符串的类方法
+ (instancetype)string;
创建一个字符串对象,并赋值string
+ (instancetype)stringWithString:(NSString *)string;
读取C语言字符串,并转换成UTF8文字
+ (nullableinstancetype)stringWithUTF8String:(constchar *)nullTerminatedCString;
字符串拼接
+ (instancetype)stringWithFormat:(NSString *)format, ...NS_FORMAT_FUNCTION(1,2);
本地化字符串
+ (instancetype)localizedStringWithFormat:(NSString *)format, ...NS_FORMAT_FUNCTION(1,2);
字符串拼接:
拼接两个字符串
- (NSString *)stringByAppendingString:(NSString *)aString;
可支持多个字符串拼接
- (NSString *)stringByAppendingFormat:(NSString *)format, ...NS_FORMAT_FUNCTION(1,2);
示例:NSString *string1 =@"OC";
NSString *string2 =@"是一门开发语言";
NSString *str = [string1stringByAppendingString:string2];
NSLog(@"%@", str);
NSString *str1 = [string1stringByAppendingFormat:@"%@%@开发语言",@"是一门",@"面向对象的"];
NSLog(@"%@", str1);
打印结果:2017-03-17 13:09:43.084 OCdemo[1198:107163] OC是一门开发语言
2017-03-17 13:09:43.085 OCdemo[1198:107163] OC是一门面向对象的开发语言
Program ended with exit code: 0
从上面的代码可以看出:stringByAppendingString:后面只能跟一个字符串,所以只能实现两个字符串之间的拼接。而stringByAppendingFormat:后面可以有N个字符串。字符串剪切的方法:
从某个下标的字符开始剪切字符串
- (NSString *)substringFromIndex:(NSUInteger)from;
剪切字符串到某个下标的字符
- (NSString *)substringToIndex:(NSUInteger)to;
在规定的范围剪切字符串
- (NSString *)substringWithRange:(NSRange)range;
代码示例:NSString *bString =@"0123456789";
NSString * str = [[NSStringalloc]init];
//从下标为3的字符开始剪切字符串
str = [bString substringFromIndex:3];
NSLog(@"%@",str);
//剪切字符串到下标为7的字符
str = [bString substringToIndex:7];
NSLog(@"%@",str);
//剪切字符串,范围为从下标为的字符3开始,长度为7
str = [bString substringWithRange:NSMakeRange(3, 7)];
NSLog(@"%@",str);
结果:2017-03-17 11:36:41.181 OCdemo[1109:84473] 3456789
2017-03-17 11:36:41.181 OCdemo[1109:84473] 0123456
2017-03-17 11:36:41.181 OCdemo[1109:84473] 3456789
Program ended with exit code: 0
字符串的下标和数组一样是从0开始的。字符串的比较:
比较两个字符串是否相同
- (BOOL)isEqualToString:(NSString *)aString;
示例:
NSString *string1 =@"啊啊啊啊啊";
NSString *string2 =@"啊啊啊啊啊";
if ([string1isEqualToString:string2]) {
NSLog(@"相同");
}else{
NSLog(@"不同");
}
结果:2017-03-17 11:48:46.890 OCdemo[1144:90511] 相同
Program ended with exit code: 0
字符串的比较还有‘==’和compare,‘==’是比较两个字符串指针的值,compare是比较两个字符串的大小,返回值为:NSOrderedAscending,NSorderedSame,NSorderedDescending(分别等于整数-1,0,1)。
相较于‘==’,isEqualToString比较的是类型和内容是否都相同。
还有一个isEqual的比较方法,这个是NSObject类的比较方法,从继承关系上来看,NSString是继承自NSObject类的。
isEqual,方法首先检查指针的等同性,相等直接返回YES,
然后是类的等同性,空或非同类对象直接返回NO,
最后调用对象的比较器进行比较。比较器的名称指示出参与比较的对象的类名称。若均相等,返回YES
isEqualToString,在比较对象都是字符串的前提下, 直接判断字符串内容,比较对象不是字符串,报错。
字符串的前缀和后缀
匹配字符串的前缀
- (BOOL)hasPrefix:(NSString *)str;
匹配字符串的后缀
- (BOOL)hasSuffix:(NSString *)str;
这两个方法,常用语去判断字符串的格式,比如:字符串是否以‘http//’开头。或者是否以‘.com’结尾。字符串中搜索子串,并返回搜索结果
- (NSRange)rangeOfString:(NSString *)searchString;
这个方法是在一个字符串中搜索searchString示例:
NSString *string2 =@"是一门开发语言";
NSRange range = [string2rangeOfString:@"一门"];
NSLog(@"%lu", range.length);
NSLog(@"%lu", range.location);
if (range.location !=NSNotFound) {
NSLog(@"搜索到了1");
}
//这个判定和上面等价
if (range.length > 0) {
NSLog(@"搜索到了2");
}
打印结果:
2017-03-17 13:21:30.764 OCdemo[1268:113450] 2
2017-03-17 13:21:30.765 OCdemo[1268:113450] 1
2017-03-17 13:21:30.765 OCdemo[1268:113450] 搜索到了1
2017-03-17 13:21:30.765 OCdemo[1268:113450] 搜索到了2
Program ended with exit code: 0
字符串替换
- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement NS_AVAILABLE(10_5, 2_0);
示例:
NSString *string2 =@"是一门开发语言";
NSRange range = [string2rangeOfString:@"一门"];
NSString *string3 = [string2stringByReplacingCharactersInRange:rangewithString:@"一种"];
NSLog(@"%@", string3);
结果:
2017-03-17 13:24:29.372 OCdemo[1280:115173] 是一种开发语言
Program ended with exit code: 0
上面的代码示例了一个搜索字符串,再替换的操作。
- OC字符串NSString
- oc 字符串NSString
- OC笔记,字符串NSString
- OC中字符串NSstring
- OC字符串(NSString)
- oc 字符串类NSString
- oc 字符串NSString
- OC NSString字符串比较
- OC--NSString字符串
- Oc课堂笔记->字符串NSString
- OC语言--字符串(NSString& NSMutableString)
- OC基础之-----字符串NSString
- OC第四讲(NSString字符串)
- OC 中 NSString 字符串处理
- my学习OC--字符串NSString
- IOS字符串,NSString,oc字符串操作
- OC-NSString从文件中读取字符串
- OC之【NSString字符串的其他用法】
- 在R中进行基于稳健马氏距离的异常检验
- tensorflow常用函数 (二)
- Android用WebView遇到的各种问题
- 使用Timer 定时器,结合TimerTask,HandlerMessage完成验证码发送功能
- TCP如何保证可靠数据传输
- OC--NSString字符串
- 前端关于日期比较大小的方法
- Cocoapods 卸载,重装,更新版本,(本人亲测)
- 内存优化个人总结
- BZOJ3993 星际战争 题解(二分+最大流)
- 高仿IOS 提示框
- unity 绘制面
- 获取网站性能指标shell脚本
- ASP.NET如何定时调用WebService服务