您的位置:首页 > 其它

OC语法<4.1>:Foundation框架中的NSString类

2014-11-23 13:47 363 查看

一:NSString类                                                                                                                                                      

Foundation框架的简介:

1:Foundation框架是苹果公司提供的工具箱,我们现在不考虑框架是怎么实现的,我们现在只需要怎么用
2:Foundation中的所有的类文件都是以NS开头,方便统一使用
字符串的简介:
创建字符串,代码如下:

<pre name="code" class="objc">int main(int argc, const char * argv[]) {
@autoreleasepool {
//1:创建字符串的方式
NSString *str1 = @"rwy";//这是一个字符串常量,一旦创建就不能改变
NSLog(@"%@",str1);

//2:系统给我们提供了一些自定义的构造方法(init....目的就是返回一个NSString对象)
NSString *str2 = @"123";
//相当于 NSString *str2 = [NSString alloc]initWithString:"123";
//因为用的太多了编译器就把NSString改成上面这种格式编译了。

NSString *str3 = [NSString stringWithFormat:@"%@%@%@",@"r",@"w",@"y"];//拼接字符串
NSLog(@"str3为:%@",str3);

}


二:字符串的获取                                                                                                                                                     

本小节知识点:
1:创建字符串
2:获取字符串长度
3:根据索引获得单个字符
4:截取字符串
5:获得字符串的索引位置
6:获得一个字符串的索引范围(了解)
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
//1:创建字符串
NSString *str = @"renwenyi";

//2:获得长度
//NSUInteger len = [str length];
NSLog(@"str长度为:%zi",str.length);

//3:根据索引获得单个字符
NSString *str1 = @"xijinping";
//如果你给的索引值超出了字符串的长度,就会报异常:Range or index out of bounds
//如果你给的值是一个负值,那么获得的值就是一个乱码
char c = [str1 characterAtIndex:6];//索引从0开始,
NSLog(@"获得的字符为:%c",c);

//4:根据索引获得字符串的一个字串(就是截取字符串的一段)
NSString *str2 = @"www.baidu.com";
//substringFromIndex:表示从哪一位开始截取,一直到最后
NSString *str3 = [str2 substringFromIndex:3];
NSLog(@"str3 为:%@",str3);
//substringToIndex:表示从头开始截取,一直到你指定的这一位
NSString *str4 = [str2 substringToIndex:3];
NSLog(@"str4为:%@",str4);
NSLog(@"str2有没有变化呢??%@",str2);
//重点:!!substringWithRange:从中间截取一段,下面例子表示从第3位开始共截取4位
NSRange range = {3,4};
NSString *str5 = [str2 substringWithRange:range];
NSLog(@"str5 为:%@",str5);

//5:获得字符串的索引位置
NSString *str6 = @"baidu";
NSRange range2 = [str2 rangeOfString:str6];
NSLog(@"range2的location为:%zi,range2的length为:%zi",range2.location,range2.length);
//我们也可以这么写,把range2变成字符串类型
NSLog(@"range2 为:%@",NSStringFromRange(range2));

//如果我们找的字符串没有在str2中肯定会报错,所以我们就需要判断一下,用NSNotFound:表示没有找到
if (range2.location == NSNotFound) {
NSLog(@"str6 不再str2当中");
}
else
{
NSLog(@"range2 为:%@",NSStringFromRange(range2));
}

//6:获得一个字符串的索引范围(了解就行,其实就是一个带参数的rangeOfString);

NSRange range3 = [str2 rangeOfString:@"com" options:(NSCaseInsensitiveSearch)];
NSLog(@"range3为:%@",NSStringFromRange(range3));

}
return 0;
}

三:字符串的判断                                                                                                                                                        
本小节知识点:
1:判断字符串是否为空
2:判断字符串是否以指定内容开头
3:判断字符串是否以指定内容结尾
4:判断两个字符串是否相等(重点)
5:compare:方法
#import <Foundation/Foundation.h>
#import "NSString+NSStringExpand.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1:判断字符串是否为空
NSString *str = @"";
if (str==nil || str.length == 0) {
NSLog(@"字符串长度为空");
}

//2:判断字符串是否以指定内容开头
NSString *str1 = @"www.baidu.com";
BOOL isPerfix = [str1 hasPrefix:@"www"];
NSLog(@"isPerfix是以www为空吗?%@",isPerfix?@"YES":@"NO");//三木运算符

//3:判断字符串是否指定的内容结尾
//在开发当中经常用在判断文件格式(.txt .avi .rmvb .mkv .doc mp3 mp4 doc )
NSString *str2 = @"renwenyi.txt";
BOOL isSuffix = [str2 hasSuffix:@".txt2"];
NSLog(@"isSuffix是否以.txt结尾呢?%@",isSuffix?@"YES":@"NO");

//4:判断两个字符串是否相等
NSString *s1 = @"123";
NSString *s2 = @"123";
NSString *s3 = s1;
NSLog(@"s1的指针地址%p",s1);
NSLog(@"s2的指针地址%p",s2);
//疑问?为什么s1和s2的指针地址相等呢?
//首先字符串的创建非常的消耗性能,系统为了优化这种方式,用了一个字符串池,在我们每次创建字符串的时候,都会把字符串放在池子当中,下一次如果我们创建一个相同对象的时候,它就会首先去池子里面找有没有这个对象,如果有的话,那么它就会直接把你这个对象的地址返回回来给你,并不会重新创建一个对象

if (s1 == s2) {
NSLog(@"s1和s2相等");
}
if (s1 == s3) {
NSLog(@"s1和s3相等");
}

//NSString *s4 = [NSString stringWithFormat:@"%@%@%@",@"a",@"b",@"c"];
NSStri
4000
ng *s4 = [NSString stringWithFormat:@"123"];
NSLog(@"s4的指针地址%p",s4);
//注意!!使用 == 号,对两个字符串进行比较,实际上是比较两个字符串的指针地址是否相等
NSLog(@"s4 为:%@",s4);
if (s1 == s4) {
NSLog(@"s1和s4相等");
}else
{
NSLog(@"s1和s4的地址不相等");
}

//如果我们想判断两个字符串的是否相等,就要使用NSString给我们提供的方法isEqualToString
//isEqualToString其实是干了两件事:
//1:判断两个字符串指针地址是否相等,如果相等直接返回YES
//2:如果不相等,会取出字符串中每一个字符进行比较,如果在比较的过程中都是相等返回yes,相反返回no
BOOL isEqualTo = [s1 isEqualToString:s4];
NSLog(@"s1和s4的相等吗?%@",isEqualTo?@"YES":@"NO");

/*
回想set方法内存管理机制:
//这里判断两个字符串是否相等,一定不能够使用 isEqualToString 方法,因为我们就是要判断两个字符串的地址是否相等
-(void)setName:(NSString *)name
{
if(_name != name)
{
[_name release];
_name = [name retain];
}
}

*/

//5:compare 是 isEqualToString 的增强版本
NSString *ss1 = @"abc";
NSString *ss2 = @"bac";
NSComparisonResult  result = [ss1 compare:ss2];
NSLog(@"result 为: %li",result);
//其实是比较字符串的Ascii值,从第一个开始一个一个比较,就三种情况,< = > 分别对应下面的三种情况
switch (result) {
case NSOrderedAscending:
NSLog(@"-1,NSOrderedAscending");
break;
case NSOrderedSame:
NSLog(@"0,NSOrderedSame");
break;
case NSOrderedDescending:
NSLog(@"1,NSOrderedDescending");
break;
default:
break;
}

//我们自己写个方法模拟 isEqualToString的实现
NSString *sss1 = @"abc";
NSString *sss2 = @"abdr";
BOOL isEqua = [sss1 isEqualToStringSelf:sss2];
NSLog(@"sss1和sss2的相等吗?%@",isEqua?@"YES":@"NO");

}
return 0;
}

四:基本数据类型和字符串的相互转换                                                                                                                    
本节知识点:
1:基本数据类型转换成字符串
2:  字符串转换成基本数据类型
3:字母的大小写转换
4:首字母大写
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
//基本数据类:char,int,float,double
//1:int 类型转换成字符串
int a = 10;
NSString *s1 = [NSString stringWithFormat:@"%d",a];
NSLog(@"s1 = %@",s1);

//2:float 转换成 NSString
float b = 2.33;
NSString *s2 = [NSString stringWithFormat:@"%.2f",b];
NSLog(@"s2 = %@",s2);

//3:double 转换成 NSString
double c = 3.33334;
NSString *s3 = [NSString stringWithFormat:@"%0.5f",c];
NSLog(@"s3 = %@",s3);

//4:char 转换成 NSString
char d = 'd';
NSString *s4 = [NSString stringWithFormat:@"%c",d];
NSLog(@"s4 = %@",s4);

//5:NSString -> int
NSString *s5 = @"123";
int value1 = [s5 intValue];
NSLog(@"value1 = %d",value1);

//6:NSString -> float
NSString *s6 = @"3.455";
float value2 = [s6 floatValue];
NSLog(@"value2 = %.3f",value2);

//7:NSString ->double
NSString *s7 = @"3.34556548";
double value3 = [s7 doubleValue];
NSLog(@"value3 = %.8f",value3);

//注意!!!
//当你把字符串转换成某种基本数据类型的时候,一定要确定你要转换的数据是正确的,eg:
NSString *s8 = @"sdf343";
int value4 = [s8 intValue];
NSLog(@"value4 = %d",value4);

//8:将字符串中的字母转换成大写
NSString *str1 = @"renwenYI";
NSString *upperstr = [str1 uppercaseString];
NSLog(@"upperstr = %@",upperstr);

//9:将字符串中的字母转换成小写
NSString *str2 = @"renwenYI";
NSString *lowerstr = [str1 lowercaseString];
NSLog(@"upperstr = %@ str2 = %@",lowerstr,str2);

//10:将首字母大写,注意了,这是一种格式,如果你字符串中有大写有小写,它可不管,最后都给你变为首字母大写其他小写
NSLog(@"str1 = %@",str1);
NSString *capstr = [str1 capitalizedString];
NSLog(@"capstr = %@",capstr);
}
return 0;
}
五:字符串重组                                                                                                                                                          
本节知识点: 
1:多个数据拼接成一个字符串
2:字符串末尾添加一个新的字符
3:在指定范围内添加新的字符串
4:使用新的字符串代替原有的字符串
5:在字符串中删除特定的元素
6:在字符串中删除空格
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1:多个数据拼接成一个字符串
int year = 2014;
int month = 1;
int day = 15;
NSString *date = [NSString stringWithFormat:@"%d-%d-%d",year,month,day];
NSLog(@"date = %@",date);
NSString *str = @"北京市";
NSString *datestr = [NSString stringWithFormat:@"时间:%@ 地点 %@",date,str];
NSLog(@"datestr 为:%@",datestr);

//2:字符串的末尾追加新的字符串
NSString *s1 = @"www.";
NSString *s2 = [s1 stringByAppendingString:@"baidu.com"];
NSLog(@"s2 = %@ s1 变了吗?请看:s1 = %@",s2,s1);

//3:在指定的范围内追加字符串
NSString *s3 = @"www.com";
NSRange range = {4,1};
//location(4)代表的是从哪个索引开始插入,length(1)代表可以覆盖几个字符
NSString *s4 = [s3 stringByReplacingCharactersInRange:range withString:@"baidu."];
NSLog(@"s4为:%@",s4);

//4:使用新的字符串代替原有的字符串
NSString *ss1 = @"www.xinlang.com";
NSString *ss2 = [ss1 stringByReplacingOccurrencesOfString:@"." withString:@"-"];
NSLog(@"ss2 = %@",ss2);

//5:在字符串中删除特定的元素(可用上面的方法)(开发当中长用在过滤某些敏感的字)
NSString *str1 = @"www.}}}}}}}baidu.com";
NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"}" withString:@""];
NSLog(@"str2 = %@",str2);

//6:在字符串中删除空格(可用上面的方法)
NSString *str3 = @"www.         baidu.com";
NSString *str4 = [str3 stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"str4 = %@",str4);

}
return 0;
}
六:字符串写入文件                                                                                                                                                 
本节知识点:
1:怎么把一个字符串写到文件当中?
2:指向指针的指针到底怎么用?
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
//将字符串写入到文件中
NSString *str = @"今天下大颗粒钻石!!";
NSString *path = @"/Users/renwenyi/Desktop/test1/zuanshi.txt";
NSError *error;
/*
第一个参数是路径
第二个参数用YES,多线程
第三个参数是编码格式用 NSUTF8StringEncoding
第四个参数 NSError是用来记录错误信息的
*/
BOOL isWriteToFile = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
//思考这里为什么要用两个*?????
//原因是因为我们想要两个返回值,见下面的例子解析
if (isWriteToFile) {
NSLog(@"写入文件成功");
}
else
{
NSLog(@"error信息:%@",error);
}

}
return 0;
}
例子解析:
writeToFile解析
-(BOOL)writeToFile2
{
BOOL is = YES;
//这样可以么?能实现么?不能吧?一个函数怎么会有两个返回值?
return error;
return is;
//所以我们传回了一个&error的一个地址,然后在前面加个 "*" error的错误信息就打印出来了,这也就是上面我们定义的 NSError *error; 这里的error就相当于&error,所以*error 就可以打印出错误信息。
}
七:从文件中读取字符串内容                                                                                                                                 
本小节知识点:
怎样把文件中的内容在我们的程序中显示出来
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
//1:给出文件路径
//2:写入文件的时候用什么格式,读取的时候就用什么格式(一般都是NSUTF8StringEncoding);
NSString *path = @"/Users/renwenyi/Desktop/test1/zuanshi.txt";
NSError *error;
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (str !=nil ) {
NSLog(@"str = %@",str);
}
else
{
NSLog(@"error = %@",error);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Foundation NSString
相关文章推荐