Foundation-NSString类
2015-07-31 23:56
357 查看
一:Foundation框架:苹果公司提供给我们的工具箱,许多类(有属性,方法),闭源的,看不到代码。
》1:目标:学习如何使用Foundation框架
》2:Foundation中的所有的类文件都是以NS开头,方便使用
》3:NSObject(基类),NSString
》4:类:有属性,方法;能够通过这个类文件作为模板,来创建对象
二:NSString类
》1:@”abd“ :常量,一旦创建完成就不能够再改变
需要一个相符的变量来接收,创建字符串的方式
(1) NSString *str = @"abd"; //[[ NSString alloc]initWithString:@"abd"];
NSLog(@"%@",str);
(2)NSString *str1 = [NSString new];
(3) NSString *str2 = [[ NSString alloc]init];
(4) 所有的初始化方法最终的目的都是返回相对应的对象
(5) NSString *str3= [NSString stringWithFormat:@"%@,%@",@"a,",@"b"]; //字符串拼接
NSString *str = @"abbhjklj;mklkl,ld" 得出以下:
》2:字符串长度的获取
NSUInteger length = [str length]; //str.length
NSLog(@"%lu",length);
》3:根据索引获得单个字符(如果你给定的索引值,超出了字符串的长度,就会导致异常 range or index out of bounds,如果你给入的是一个负数,那么获得的值就是一个乱码)
unichar c =[str characterAtIndex:8];//索引值是从0开始的
NSLog(@"%c",c);
》4:根据索引获得一个子串,原来的索引并不会发生任何改变
NSString *tempStr = [str substringFromIndex:2];//substringFromIndex从给定的索引开始(不包含该索引位置)截取 到字符串末尾
NSString *tempStr = [str substringToIndex:2]; //substringToIndex 截取字符串到给定索引的位置结束(不包含该索 引位置)
NSRange rang = {1,2}; //NSRange中有两个参数 location(起始索引的位置,包含该索引),length(要截取的长度)
NSString *tempStr = [str substringWithRange:rang]; //substringWithRange 截取字符串的某一段
NSLog(@"%@",tempStr);
》5:根据字符串,获得该字符串在另一个字符串中的索引位置
NSString *str1= @"mklkl";
NSRange tmpRange = [str rangOfString:str1];
NSLog(@"location = %d ,length = %d",tmpRange.location,tmpRange.length); //不经常用
也可以这样写
NSLog(@"rangeOfString %d",NSStingFromRange(tmpRange)); //会打印出{9,5}
可以使用NSStingFromRange把一个Range结构体转换成字符串
如果字符没有在原字符串中,应
if(tmpRange.location == NSNotFound)
{
NSLog(@"str1 不在 str 中");
}else
{
NSLog(@"rangeOfString %d",NSStingFromRange(tmpRange));
}
》6:判断字符串是否为空
if(str == nil || str.length ==0)
{
}
》7:判断字符串是否以指定的内容开头
BOOL isPerfix = [str hasPrefix:@"abb"];
NSLog(@" %@",isPerfix ? @"YES" :@ "NO"); //也可以用if 来判断
》8:判断字符串是否以指定的内容结尾(在开发中常用在 判断文件格式 .txt .avi .rmvb mkv doc)
BOOL isSuffix = [str hasSuffix:@".txt"];
NSLog(@" %@",isSuffix ? @"YES" :@ "NO");
》9:判断两个字符串是否相等
NSString *pstr1 = @"abc";
NSString *pstr2 = @"abc";
//使用== 号 判断两个字符串,实际上是判断字符串地址是否相同,如果地址相同的话,两个字符串相等。
if(pstr1 == pstr2)
{
NSLog(@"pstr1 与 pstr2");
}
//判断两个字符串是否相等,必须使用NSString 提供给我们的方法,isEqualToString ,两个步骤
1:判断两个字符串指针地址是否相等,如果相等直接返回YES
2:如果地址不相等,会取出字符串的每个字符进行比较
在实际的开发中,切记不要使用 == 号去判断两个字符是否相等。
但在内存管理set方法中,判断两个字符串是否相等,一定不能够使用 isEqualToString 方法,因为我们就是要判断两个字符串的指针地址是否相等。
BOOL isEqual = [pstr1 isEqualToString:pstr2];
NSLog(@" %@",isEqual ? @"YES" :@ "NO");
》10:compare 是 isEqualToString的增强版本,返回三个参数
NSComparisonResult result = [pstr1 compare pstr2];
如果两者相等,打印出 0 (NSOrderedSame)
如果pstr1 字符的 ASCII 小于 pstr2 字符的 ASCII ,打印出 NSOrderedAscending (逐个字符比较)
如果pstr1 字符的 ASCII 大于 pstr2 字符的 ASCII ,打印出 NSOrderedDescending (逐个字符比较)
》11:模拟isEqualToString的内部实现
可以创建一个分类 NSStringExt ,在其.m 文件中实现方法
-(BOOL)myIsEqual:(NSString *)str
{
// 1:判断两个字符串指针地址是否相等,如果相等直接返回YES
if(self == str)
{
return YES;
}
//如果两个字符串的长度不相等
if(self.length != str.length)
{
return NO;
}
//逐个字符判断
for(int i=0; i<self.length;i++)
{
unichar c1= [self characterAtIndex:i];
unichar c2= [str characterAtIndex:i];
if(c1 != c2)
{
return NO;
}
return YES;
}
接着在main.m中进行调用
BOOL isEqual3 = [pstr1 myIsEqual:pstr2];
NSLog(@" %@",isEqual3 ? @"YES" :@ "NO");
》12:基本数据类型(int float double char) 与字符串的相互转换
(1)int 类型转换成字符串
int a=10;
NSString *str = [NSString stringWithFormat:@"%d",a];
NSLog(@"%@",str);
(2)float类型转换成字符串
float f=2.5;
NSString *str = [NSString stringWithFormat:@"%.1f",f];
NSLog(@"%@",str);
(3)double 类型转换成字符串
double d=23.6898;
NSString *str = [NSString stringWithFormat:@"%.4f",d];
NSLog(@"%@",str);
(4)char 类型转换成字符串
char c='f';
NSString *str = [NSString stringWithFormat:@"%c",c];
NSLog(@"%@",str);
(5)字符串转换为int基本数据类型
NSString *str = @"2";
int i=[str intValue];
NSLog(@"%d",i);
(6)字符串转换为float基本数据类型
NSString *str = @"2.5";
float f=[str floatValue];
NSLog(@"%.1f",f);
(7)字符串转换为double基本数据类型
NSString *str = @"9.89";
double d=[str doubleValue];
NSLog(@"%.2f",d);
注:当你要把字符串转换成某种基本数据类型的时候,一定要确定你要转换的数据是正确的
(8)将字符串中的字母转换成大写
NSString *str = @"china";
NSString *temStr = [ str uppercaseString];
NSLog(@"%@",temStr);
(9)将字符串中的字母转换成小写
NSString *str = @"CHINA";
NSString *temStr = [ str lowercaseString];
NSLog(@"%@",temStr);
(10)将字符串中的首字母转换成大写
NSString *str = @"china";
NSString *temStr = [ str capitalizedString];
NSLog(@"%@",temStr);
》13:字符串重组
(1)多个数据拼接成一个字符串
int year = 1993;
int month = 6;
int day = 17;
NSString *date = [NSString stringWithFormat:@"%d年 %d月 %d日 ",year,month,day];
NSLog(@"%@",date);
NSSting *address = @"四川,成都";
NSString *dateAndAddress = [NSString stringWithFormat:@"%@ 地址:%@",date,address];
NSLog(@"%@",dateAndAddress);
(2)在字符串的末尾追加新的字符,str1是不变的,返回回来的都是新的字符串str2
NSString *str1 = @"www.";
NSString *str2 = [str1 stringByAppendingString:@"china"];
NSLog(@"%@",str2);
(3)在指定的范围追加字符串
NSString *str3 = @"www.com";
NSRange range = {4,0}; //location 代表的是从哪个索引开始插入,length代表的意思是可以覆盖几个字符
NSString *str4 = [str3 stringByReplacingCharactersInRange:rang withString :@"china."];
NSLog(@"%@",str4); //结果为www.china.com
(4)使用新的字符替换原有的字符
NSString *str5= @"www.china.com"; //将. 换成!
NSString *str6 = [str5 stringByReplacingOccurrencesOfString:@"." withString:@"!"];
NSLog(@"%@",str6); //结果为 www!china!com
(5)在字符串中删除特定的某些字符(过滤掉某些关键字)
NSString *str7= @"www---.china.--com";
NSString *str8 = [str7 stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"%@",str8); //结果为 www.china.com
(6)去掉字符串中的空格
NSString *str9= @"www .china. com";
NSString *str10 = [str9 stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"%@",str10); //结果为 www.china.com
》14:字符串文件操作
》1:将字符串写入到文件中
NSString *content = @"中国风光很好";
NSString *path = @"/Users/apple/Desktop/共享/my.txt";
//1:参数一 要给文件目录,并且要包括文件名称
//2: atomically :YES
//3:NSUTF8StringEncoding 国际通用的编码格式
//4:NSError是用来记录错误信息的
NSError *error; //如果发生了错误,它会返回&error信息
BOOL isWriteSuccess = [content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error :&error];
if(isWriteSuccess)
{
NSLog(@"文件创建成功");
}
else
{
NSLog(@"error %@",error);
}
》2:从文件中读取字符串内容
//要给出文件路径。 写入文件的时候使用的是什么编码格式,读取的时候就要用什么编码格式,这样就不会出现乱码
NSString *path = @"/Users/apple/Desktop/共享/my.txt";
NSError *error;
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error :&error];
if(error != nil) //若有错
{
NSLog(@"error %@",error);
}
else{
NSLog(@" str content %@",str);
}
》15:可变长度字符串
//NSMutableString继承自NSString,拥有NSString所有的属性和方法
NSMutableString *muStr = [[NSMutableString alloc]init]; //创建可变字符串
[muStr setString :@"www"]; //是初始化字符串内容
[muStr appendString:@".com"];//动态在原来的字符串末尾追加.com,这个方法已经改变了原来的字符串。而不像 stringByAppendString
方法只是返回一个新的字符串,原字符串没有改变
[muString insertString:@".china" atIndex:3]; //在指定的索引位置,插入字符串
NSRange range ={ 3,6};
[muStr deleteCharactersInRange:range]; //删除指定范围的字符串,删除的长度,一定不能超出字符串的长度,会导
致异常,Range or index out of bounds
NSRange range ={ 3,6};
[muStr replaceCharactersInRange:range withString:@"中国"]; //替换指定范围内的字符串
》1:目标:学习如何使用Foundation框架
》2:Foundation中的所有的类文件都是以NS开头,方便使用
》3:NSObject(基类),NSString
》4:类:有属性,方法;能够通过这个类文件作为模板,来创建对象
二:NSString类
》1:@”abd“ :常量,一旦创建完成就不能够再改变
需要一个相符的变量来接收,创建字符串的方式
(1) NSString *str = @"abd"; //[[ NSString alloc]initWithString:@"abd"];
NSLog(@"%@",str);
(2)NSString *str1 = [NSString new];
(3) NSString *str2 = [[ NSString alloc]init];
(4) 所有的初始化方法最终的目的都是返回相对应的对象
(5) NSString *str3= [NSString stringWithFormat:@"%@,%@",@"a,",@"b"]; //字符串拼接
NSString *str = @"abbhjklj;mklkl,ld" 得出以下:
》2:字符串长度的获取
NSUInteger length = [str length]; //str.length
NSLog(@"%lu",length);
》3:根据索引获得单个字符(如果你给定的索引值,超出了字符串的长度,就会导致异常 range or index out of bounds,如果你给入的是一个负数,那么获得的值就是一个乱码)
unichar c =[str characterAtIndex:8];//索引值是从0开始的
NSLog(@"%c",c);
》4:根据索引获得一个子串,原来的索引并不会发生任何改变
NSString *tempStr = [str substringFromIndex:2];//substringFromIndex从给定的索引开始(不包含该索引位置)截取 到字符串末尾
NSString *tempStr = [str substringToIndex:2]; //substringToIndex 截取字符串到给定索引的位置结束(不包含该索 引位置)
NSRange rang = {1,2}; //NSRange中有两个参数 location(起始索引的位置,包含该索引),length(要截取的长度)
NSString *tempStr = [str substringWithRange:rang]; //substringWithRange 截取字符串的某一段
NSLog(@"%@",tempStr);
》5:根据字符串,获得该字符串在另一个字符串中的索引位置
NSString *str1= @"mklkl";
NSRange tmpRange = [str rangOfString:str1];
NSLog(@"location = %d ,length = %d",tmpRange.location,tmpRange.length); //不经常用
也可以这样写
NSLog(@"rangeOfString %d",NSStingFromRange(tmpRange)); //会打印出{9,5}
可以使用NSStingFromRange把一个Range结构体转换成字符串
如果字符没有在原字符串中,应
if(tmpRange.location == NSNotFound)
{
NSLog(@"str1 不在 str 中");
}else
{
NSLog(@"rangeOfString %d",NSStingFromRange(tmpRange));
}
》6:判断字符串是否为空
if(str == nil || str.length ==0)
{
}
》7:判断字符串是否以指定的内容开头
BOOL isPerfix = [str hasPrefix:@"abb"];
NSLog(@" %@",isPerfix ? @"YES" :@ "NO"); //也可以用if 来判断
》8:判断字符串是否以指定的内容结尾(在开发中常用在 判断文件格式 .txt .avi .rmvb mkv doc)
BOOL isSuffix = [str hasSuffix:@".txt"];
NSLog(@" %@",isSuffix ? @"YES" :@ "NO");
》9:判断两个字符串是否相等
NSString *pstr1 = @"abc";
NSString *pstr2 = @"abc";
//使用== 号 判断两个字符串,实际上是判断字符串地址是否相同,如果地址相同的话,两个字符串相等。
if(pstr1 == pstr2)
{
NSLog(@"pstr1 与 pstr2");
}
//判断两个字符串是否相等,必须使用NSString 提供给我们的方法,isEqualToString ,两个步骤
1:判断两个字符串指针地址是否相等,如果相等直接返回YES
2:如果地址不相等,会取出字符串的每个字符进行比较
在实际的开发中,切记不要使用 == 号去判断两个字符是否相等。
但在内存管理set方法中,判断两个字符串是否相等,一定不能够使用 isEqualToString 方法,因为我们就是要判断两个字符串的指针地址是否相等。
BOOL isEqual = [pstr1 isEqualToString:pstr2];
NSLog(@" %@",isEqual ? @"YES" :@ "NO");
》10:compare 是 isEqualToString的增强版本,返回三个参数
NSComparisonResult result = [pstr1 compare pstr2];
如果两者相等,打印出 0 (NSOrderedSame)
如果pstr1 字符的 ASCII 小于 pstr2 字符的 ASCII ,打印出 NSOrderedAscending (逐个字符比较)
如果pstr1 字符的 ASCII 大于 pstr2 字符的 ASCII ,打印出 NSOrderedDescending (逐个字符比较)
》11:模拟isEqualToString的内部实现
可以创建一个分类 NSStringExt ,在其.m 文件中实现方法
-(BOOL)myIsEqual:(NSString *)str
{
// 1:判断两个字符串指针地址是否相等,如果相等直接返回YES
if(self == str)
{
return YES;
}
//如果两个字符串的长度不相等
if(self.length != str.length)
{
return NO;
}
//逐个字符判断
for(int i=0; i<self.length;i++)
{
unichar c1= [self characterAtIndex:i];
unichar c2= [str characterAtIndex:i];
if(c1 != c2)
{
return NO;
}
return YES;
}
接着在main.m中进行调用
BOOL isEqual3 = [pstr1 myIsEqual:pstr2];
NSLog(@" %@",isEqual3 ? @"YES" :@ "NO");
》12:基本数据类型(int float double char) 与字符串的相互转换
(1)int 类型转换成字符串
int a=10;
NSString *str = [NSString stringWithFormat:@"%d",a];
NSLog(@"%@",str);
(2)float类型转换成字符串
float f=2.5;
NSString *str = [NSString stringWithFormat:@"%.1f",f];
NSLog(@"%@",str);
(3)double 类型转换成字符串
double d=23.6898;
NSString *str = [NSString stringWithFormat:@"%.4f",d];
NSLog(@"%@",str);
(4)char 类型转换成字符串
char c='f';
NSString *str = [NSString stringWithFormat:@"%c",c];
NSLog(@"%@",str);
(5)字符串转换为int基本数据类型
NSString *str = @"2";
int i=[str intValue];
NSLog(@"%d",i);
(6)字符串转换为float基本数据类型
NSString *str = @"2.5";
float f=[str floatValue];
NSLog(@"%.1f",f);
(7)字符串转换为double基本数据类型
NSString *str = @"9.89";
double d=[str doubleValue];
NSLog(@"%.2f",d);
注:当你要把字符串转换成某种基本数据类型的时候,一定要确定你要转换的数据是正确的
(8)将字符串中的字母转换成大写
NSString *str = @"china";
NSString *temStr = [ str uppercaseString];
NSLog(@"%@",temStr);
(9)将字符串中的字母转换成小写
NSString *str = @"CHINA";
NSString *temStr = [ str lowercaseString];
NSLog(@"%@",temStr);
(10)将字符串中的首字母转换成大写
NSString *str = @"china";
NSString *temStr = [ str capitalizedString];
NSLog(@"%@",temStr);
》13:字符串重组
(1)多个数据拼接成一个字符串
int year = 1993;
int month = 6;
int day = 17;
NSString *date = [NSString stringWithFormat:@"%d年 %d月 %d日 ",year,month,day];
NSLog(@"%@",date);
NSSting *address = @"四川,成都";
NSString *dateAndAddress = [NSString stringWithFormat:@"%@ 地址:%@",date,address];
NSLog(@"%@",dateAndAddress);
(2)在字符串的末尾追加新的字符,str1是不变的,返回回来的都是新的字符串str2
NSString *str1 = @"www.";
NSString *str2 = [str1 stringByAppendingString:@"china"];
NSLog(@"%@",str2);
(3)在指定的范围追加字符串
NSString *str3 = @"www.com";
NSRange range = {4,0}; //location 代表的是从哪个索引开始插入,length代表的意思是可以覆盖几个字符
NSString *str4 = [str3 stringByReplacingCharactersInRange:rang withString :@"china."];
NSLog(@"%@",str4); //结果为www.china.com
(4)使用新的字符替换原有的字符
NSString *str5= @"www.china.com"; //将. 换成!
NSString *str6 = [str5 stringByReplacingOccurrencesOfString:@"." withString:@"!"];
NSLog(@"%@",str6); //结果为 www!china!com
(5)在字符串中删除特定的某些字符(过滤掉某些关键字)
NSString *str7= @"www---.china.--com";
NSString *str8 = [str7 stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"%@",str8); //结果为 www.china.com
(6)去掉字符串中的空格
NSString *str9= @"www .china. com";
NSString *str10 = [str9 stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"%@",str10); //结果为 www.china.com
》14:字符串文件操作
》1:将字符串写入到文件中
NSString *content = @"中国风光很好";
NSString *path = @"/Users/apple/Desktop/共享/my.txt";
//1:参数一 要给文件目录,并且要包括文件名称
//2: atomically :YES
//3:NSUTF8StringEncoding 国际通用的编码格式
//4:NSError是用来记录错误信息的
NSError *error; //如果发生了错误,它会返回&error信息
BOOL isWriteSuccess = [content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error :&error];
if(isWriteSuccess)
{
NSLog(@"文件创建成功");
}
else
{
NSLog(@"error %@",error);
}
》2:从文件中读取字符串内容
//要给出文件路径。 写入文件的时候使用的是什么编码格式,读取的时候就要用什么编码格式,这样就不会出现乱码
NSString *path = @"/Users/apple/Desktop/共享/my.txt";
NSError *error;
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error :&error];
if(error != nil) //若有错
{
NSLog(@"error %@",error);
}
else{
NSLog(@" str content %@",str);
}
》15:可变长度字符串
//NSMutableString继承自NSString,拥有NSString所有的属性和方法
NSMutableString *muStr = [[NSMutableString alloc]init]; //创建可变字符串
[muStr setString :@"www"]; //是初始化字符串内容
[muStr appendString:@".com"];//动态在原来的字符串末尾追加.com,这个方法已经改变了原来的字符串。而不像 stringByAppendString
方法只是返回一个新的字符串,原字符串没有改变
[muString insertString:@".china" atIndex:3]; //在指定的索引位置,插入字符串
NSRange range ={ 3,6};
[muStr deleteCharactersInRange:range]; //删除指定范围的字符串,删除的长度,一定不能超出字符串的长度,会导
致异常,Range or index out of bounds
NSRange range ={ 3,6};
[muStr replaceCharactersInRange:range withString:@"中国"]; //替换指定范围内的字符串
相关文章推荐
- NSString与C字符串之间的相互转换
- 只会CSS还不够,LESS、SASS、BootStrap、Foundation一网打尽!
- NSString 用法2
- NSString 用法3
- IOS字符串拼接方法小结
- ios NSString 使用
- Open Source Foundation
- 字符串处理,数据类型
- NSString为啥要使用Copy属性
- 字面量语法的好处
- 字符串的获取
- isEqualToString的内部实现
- 字符串的判断
- 字符串重组
- 黑马程序员----OC学习NSString使用方法
- Objectvie-C之 NSString 处理技巧<一>:分割字符串
- IOS 字符串中去除特殊符号 stringByTrimmingCharactersInSet 应该用于账号登录等
- NSString 纯数字判断~~~
- NSString 的内存问题
- NSDATA如何转成NSString