NSString 和 NSMutableString类的常见的几种用法
NSString和NSMutableString 是Foundation框架下两个常用的处理字符串的类。NSString是静态,而NSSMutableString是动态的。
1. NSString构建字符串
1)最简单的方法,将常量字符串直接赋值给NSString类对象
NSString *str = @"你好!";
2)用NSString类方法可以通过一个C字符串构建OC的字符串
举例:
char *cstr = "你好!";
NSString *str = [NSString stringWithCString : cstr encoding: NSUTF8StringEncording];//C语言中的字符以UTF8来编码的
NSLog(@"str = %@",str);//输出结果:str = 你好!
stringWithUTF8String可以简化上面的写法
NSString *str = [NSString stringWithUTF8String:"你好!"];
3)NSString 类方法格式化的创建一个字符串
NSString *str = [NSString stringWithFormat:@"%@%d",@"中国",123];
NSLog(@"%@", str);//输出结果:中国123
4)stringWithString
举例
~~ NSString *str = [NSString stringWithString:@"你好"];~~//这种写法不提倡了,可以直接被第一种替代
5)实例(对象)方法创建字符串
[NSString alloc]initWith…
举例
~~NSString *str = [[NSString alloc]initWithString:@"hello123"]; ~~//这样赋值的方式已经不推荐了,可以直接被第一种替代[NSString alloc]initWithString先在堆区申请内存空间,然后赋一个常量字符串,最后把这个常量字符串存到了常量区,之前申请的堆区空间就浪费了,所以不再推荐这样初始化了。
NSString *str = [[NSString alloc]initWithFormat:@"%d%@", 123,@"中国"];//格式化的初始化
NSLog(@"%@", str);//输出结果:123中国
NSString *str = [[NSString alloc]initWithUTF8String:"中国"];//UTF8编码字符串转成OC字符串
NSLog(@"%@", str);//输出结果:中国
2.对字符串字母进行大小转换处理
1)小写转大写(uppercaseString)
举例
NSString *str = @"abcdEf12";
str = [str uppercaseString];
NSLog(@"%@",str);//输出结果:ABCDEF12
2) 大写转小写(lowercaseString)
NSString *str = @"HELLO WORLD";
str = [str lowercaseString];
NSLog(@"%@",str);//输出结果: hello world
3.判断字符串长度(length)
NSString *str = @"1234abc";//字符串中没有汉字的情况
unsigned long len = [str length];
NSLog(@"len = %lu",len);//输出结果:len = 7
NSString *str1 = @"123中国";//字符串有汉字的情况
unsigned long len1 = [str1 length];
NSLog(@"len1 = %lu",len1);//输出结果:len = 5//这里可以看出在OC中,一个汉字默认占一个字符
而实际上,如果用UTF8编码的话,一个汉字在OC中又占多少个字符呢
NSString *str2 = @"123中国";
unsigned long len2 = [str2 lengthOfBytesUsingEncoding: NSUTF8StringEncoding];
NSLog(@"len2 = %lu",len2);//输出结果:len2 = 9 //由此看出一个汉字占3个字符
4. 判断字符串中是否包含有某个字符串(rangeOfString)
NSString *str1 = @"钓鱼岛是中国的!";
NSString *str2 = @"中国";
//判断str1是否包含str2
NSRange r = [str1 rangeOfString: str2];//rangeOfString 方法返回的是一个NSRange的结构体变量
if(r.location!=NSNotFound)
{
NSLog(@"r.location = %lu, r.length = %lu",r.location, r.length);//如果包含, 输出str2在str1中开始的索引值,和长度
}
else
{
NSLog(@"NotFound");//如果不包含
}
5. 字符串内容比较(isEqualToString)
//有两个字符串,比较它们的内容是否一样
NSString *str1 = @"123a";
NSString *str2 = @"123a";
BOOL b = [str1 isEqualToString:str2];//该方法返回的值是BOOL型的,应该用一个BOOL的变量保存
if(b)
{
NSLog(@"same");
}
else
{
NSLog(@"different");
}
6. 字符串转数值
NSString *str = @"123";//只能转数值的字符
int a = [str intValue];//转整型
NSLog(@"a = %d", a);//a = 123
NSString *str1 = @"12.3";
double d = [str1 doubleValue];//转double型
NSLog(@"d = %.2f", d);//d = 12.30
7. 判断字符串是否以某个字符串开头或结尾
1)是不是以某个字符串开头的(hasPrefix)
NSString *str1 = @"马化腾";
//判断是不是以"马"开头的名字(假如str1是个人,在不知道全名的情况下,判断str1是不是姓马)
BOOL b = [str1 hasPrefix:@"马"];//hasPrefix方法返回的是BOOL型的数据类型
if(b)
{
NSLog(@"这个人姓马,他的名字是%@", str1);
}else
{
NSLog(@"不姓马");
}
2)是不是以某个字符串结尾的(hasSuffix)
NSString *str = @"世界最高峰在中国";
BOOL b = [str hasSuffix:@"中国"];//hasSuffix方法返回的也是BOOL型数据
if(b)
{
NSLog(@"是以“中国”结尾的一句话");
}
else
{
NSLog(@"不是");
}
8. 从某个字符串中提取子字符串
1)从字符串的某个索引位置开始提取(substringFromIndex)
NSString *str = @"爱你的虎口我脱离了危险";
str = [str substringFromIndex:5];//提取从索引为5(我)的字符开始到字符串结尾
NSLog(@"%@",str);//输出结果:我脱离了危险
2) 提取从字符串的开头到某个索引位置之前的部分(substringToIndex)
NSString *str = @"abcdefgh";
str = [str substringToIndex:3];
NSLog(@"%@",str);//输出结果:abc
3)提取字符串中某个范围的子字符串(substringWithRange)
NSString *str = @"钢铁锅寒夜里喊修瓢锅";
NSRange r = {4,3};
str = [str substringWithRange:r];
NSLog(@"%@",str);//输出结果:夜里喊
4)应用:”123456abc”逆序输出
NSString *str = @"12345abc";
NSRange r = {0,1};
for(long i=[str length]-1;i>=0;i--)
{
r.location = i;
NSLog(@"%@",[str substringWithRange:r]);
}
9. 删除字符串两端的空格
NSString *str1 = @"我们 ";
NSString *str2 = @" 是";
NSString *str3 = @"程序猿";
str1 = [str1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];//这么长的方法,我也是醉了,必须靠Xcode提示啊
str2 = [str2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"%@%@%@",str1,str2,str3);//打印出来看看,结果是:我们是程序猿
10. 写内容到磁盘文件(writeToFile),再读取内容
NSString *str = @"胜利是属于我们的!";
~~[str writeToFile:@"a.txt",atomically:YES];~~//这种写文件的形式已经被弃用了
[str writeToFile:@"a.txt" atomically:NO encoding:NSUTF8StringEncoding error:nil];//把str里的类容写到a.txt文件里,保存到磁盘
NSString *str1;
NSError *error;
str1 = [NSString stringWithContentsOfFile:@"a.txt" encoding:NSUTF8StringEncoding error:&error];//类方法只能由类调用,这里用NSString来调用
NSLog(@"%@%@",error,str1);
11.字符串扩展stringByAppendingString
NSString *str = @"abcd";
str = [str stringByAppendingString:@"efgh"];
NSLog(@"%@",str);
12. NSMutableString动态类
NSMutableString *str = [NSMutableString stringWithCapacity:100];//预留100个字符的空间
NSLog(@"%@",str);//此时是空串
[str appendString:@"123"];//直接添加字符串"123"
[str appendFormat:@"%d",123];//格式化的添加"123"
NSRange r = {0,2};
[str replaceCharactersInRange:r withString:@""];
NSLog(@"%@",str);
[str deleteCharactersInRange:r];//删除字符串某个范围的字符
NSLog(@"%@",str);