您的位置:首页 > 其它

NSString 和 NSMutableString类的常见用法

2016-05-20 14:59 429 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  foundation