OC字符串
一、NSString 不可变字符串(内容)
1、OC的字符串常量
打印字符串,C使用%s,OC使用%@,%@是一个很强大的打印符,只要是对象,就能用%@来打印
@"我是人";//这就是一个字符串常量
NSLog(@"%@",@"pp");
2、OC字符串变量(对象)
的字符串是一个对象
NSString *str = @"我是好人";
//@"我是好人",字符串常量
//str 字符串对象的指针,str指向了@"我是好人"这个字符串常量
NSLog(@"%@",str);
3、实例化OC字符串对象
用alloc方法
3.1.1 用另一个OC字符串来初始化新的OC字符串
NSString *strAllocWithStr = [[NSString alloc] initWithString:str];//一个字符串对象
//方法名是initWithString,参数是一个NSString字符串对象
3.1.2 用一个C字符串来初始化新的OC字符串
NSString *strAllocWithChar = [[NSString alloc] initWithCString:"我也是好人" encoding:NSUTF8StringEncoding];
//方法名是initWithCString:encoding:,第一个参数是一个C的字符串,第二个参数是编码
3.1.3 用格式化的方式来初始化新的OC字符串
NSString *strAllocWithFormat = [[NSString alloc] initWithFormat:@"%d%@",11,str];
NSLog(@"%@,%@,%@",strAllocWithStr,strAllocWithChar,strAllocWithFormat);
练习
NSString *newStr = [[NSString alloc] initWithString:@"哈哈"];
NSString *newStr1 = [[NSString alloc] initWithCString:"嘻嘻" encoding:NSUTF8StringEncoding];
NSString *newStr2 = [[NSString alloc] initWithFormat:@"%@%@",newStr,newStr1];
NSLog(@"%@",newStr2);
3.2 用类方法来初始化OC字符串
用一个OC字符串来初始化新的OC字符串
NSString *strWithString = [NSString stringWithString:str];
3.2.2 用一个C字符串来初始化新的OC字符串
NSString *strWithCString = [NSString stringWithCString:"我也是好人" encoding:NSUTF8StringEncoding];
3.2.3 用格式化方法来初始化新的OC字符串
NSString *strWithFormat = [NSString stringWithFormat:@"%d%@",11,str];
NSLog(@"%@,%@,%@",strWithString,strWithCString,strWithFormat);
练习:
//有两个数字:11、12,请用alloc init方法把他们拼成一个OC字符串,再用类方法,把他们拼成一个OC字符串
NSString *numAllocStr = [[NSString alloc] initWithFormat:@"%d%d",11,12];
NSString *numStr = [NSString stringWithFormat:@"%d%d",11,12];
NSLog(@"%@,%@",numAllocStr,numStr);
//用你喜欢的format方法,把@”pp“ @”是“ @”好人“拼成一个@”pp是好人“
NSString *strAllocStr =[[NSString alloc]initWithFormat:@"%@%@%@",@"pp",@"是",@"好人"];
NSString *str11=[NSString stringWithFormat:@"%@,%@,%@",@"pp",@"是",@"好人"];
4、字符串的拼接
4.1 在一个字符串的后面拼上新的字符串
//我准备在str后面拼上@“才怪”
NSString *str1 = [str stringByAppendingString:@"才怪"];//拼完了之后,会生成一个新的NSString,因此需要有一个NSString 的对象来接受这个方法的返回值
NSLog(@"str is %@",str);
NSLog(@"str1 is %@",str1);
//使用stringByAppendingString可以在一个NSString字符串的后面拼上一个新的字符串,生成一个新的字符串
4.2 随便拼
NSString *str3 = [NSString stringWithFormat:@"%@%@%@%d",@"123",str,@"才怪",99];
NSLog(@"%@",str);
NSLog(@"%@",str3);
//请在@“我“后面拼上@”饿了“,使用两种办法
NSLog(@"%@",[@"我" stringByAppendingString:@"饿了"]);
NSLog(@"%@",[NSString stringWithFormat:@"%@%@",@"我",@"饿了"]);
//使用随便拼,format的方法,还有一个功能,就是把int这些基本类型转成字符串
//请把@“123”,@“567”,@“pp”,拼成@“pp567123”,用两种办法
NSString *newstr = [@"123"stringByAppendingString:@"567"];
NSString *newstr2 = [newstr stringByAppendingString:@"pp"];
NSLog(@"%@",newstr2);
NSString *newstr1 = [NSString stringWithFormat:@"%d%d%@",123,567,@"pp"];
NSLog(@"%@",newstr1);
5、计算字符串的长度
int length = [str length];
//length方法用来返回一个字符串的长度,这是一个-方法,要用一个字符串对象来调用
NSLog(@"%d",length);
//请计算@"123456789"的长度
int numLength = [@"123456789" length];
NSLog(@"%d",numLength);
6、判断两个字符串是否完全相同
NSString *equlStr1 = @"i love u";
NSString *equlStr2 = @"i love u";
BOOL result = [equlStr1 isEqualToString:equlStr2];
NSLog(@"%d",result);
//isEqualToString判断两个字符串是否相等,是一个-方法,用一个字符串调用,参数是另一个字符串,结果是这两个字符串是否相等
if([equlStr1 isEqualToString:equlStr2])
//真
//dosomething
}
else
//假
//dosomething
}
//请判断,@“午饭”和@“牛饭”是否相等
7、比较两个字符串的大小
//有@“pp”,@"qq"
int answer = [@"qq" compare:@"qq"];
NSLog(@"%d",answer);
//请比较@“我是人”和@“我是pp”谁大
int answer1 = [@"我是人" compare:@"我是pp"];
NSLog(@"%d",answer1);
8、不区分大小写的比较
//比较@“Abc”和@“abc”的大小,如果不区分大小写
int answer2 = [@"Abc" compare:@"abc" options:NSCaseInsensitiveSearch];//这个比较方法是一个-方法,用一个字符串对象调用,第一个参数是要比较的另一个字符串对象,第二个参数是一个约束条件,这里是不区分大小写
NSLog(@"%d",answer2);
9、变大变小
NSString *beginStr = @"abc";
//NSString *beginStr = [NSString stringWithString:@"abc"];这么写和上面的结果是一样的
9.1 把这个字符串变成大写
NSString *upStr = [beginStr uppercaseString];
NSLog(@"%@,%@",beginStr,upStr);
9.2 把大写字符串变成小写
NSString *lowStr = [upStr lowercaseString];
NSLog(@"%@,%@,%@",beginStr,upStr,lowStr);
9.3 大写首字母
NSString *capStr = [lowStr capitalizedString];
NSLog(@"%@,%@,%@,%@",beginStr,upStr,lowStr,capStr);
10、在一个字符串中,查找另一个字符串
NSString *originalStr = @"我们都是好人";
NSString *searchStr = @"坏";
NSRange range = [originalStr rangeOfString:searchStr];//结构体不要加*
//方法名是rangeOfString,参数是想被查的字符串,这个方法是减方法,要用一个字符串对象调用(原始大字符串)
NSLog(@"好的位置是%d,好的长度是%d",range.location,range.length);
if(range.location != NSNotFound)
{
NSLog(@"找到了");
}
else
{
NSLog(@"啥也没有");
}
//请在@"ios1435class都是好家伙"中查找@"pp",判断是否能找到,如果找到了:打印@"nice",如果没找到,继续在@"ios1435class都是好家伙"中查找@"class",如果找到了,打印这个class的location和长度,如果没找到打印:@"nice"
NSString *bigStr = @"ios1435class都是好家伙";
NSString *smallStr = @"pp";
NSString *smallStr1 = @"class";
if([bigStr rangeOfString:smallStr].location != NSNotFound)
{
NSLog(@"nice");
}
else
{
if([bigStr rangeOfString:smallStr1].location != NSNotFound)
{
NSLog(@"%d,%d",[bigStr rangeOfString:smallStr1].location,[bigStr rangeOfString:smallStr1].length);
}
else
{
NSLog(@"nice");
}
}
11、对字符串进行切割
NSString *tempStr = @"abcdefghijklmnopqrstuvwxyz";
11.1 从头切,切到哪儿你定,定的这一位不切
NSString *frontStr = [tempStr substringToIndex:4];
NSLog(@"%@",frontStr);
11.2 从哪切你定,切到尾,定的这位也要切
NSString *middleStr = [tempStr substringFromIndex:25];
NSLog(@"%@",middleStr);
11.3 告诉我从哪儿切,切多少
NSRange tempRange = NSMakeRange(25, 1);//手动制作NSRange结构体
NSString *rangeStr = [tempStr substringWithRange:tempRange];
NSLog(@"%@",rangeStr);
练习:
请把@“今天天气不错,是风和日丽的,我们下午没有课,是心情也不错”,切一下,
第一步,切出心情也不错
第二步,切出今天
第三步,切出我们下午没有课
12、判断一个字符串的头和尾
NSString *urlStr = @"http://www.baidu.com";
12.1判断他有没有http的头
BOOL isHasHttpHead = [urlStr hasPrefix:@"http"];//在urlStr中查找是否有http这个开头
if(isHasHttpHead)
{
//dosomething
}
else
{
//dosomething
}
12.2判断他有没有com的尾
BOOL isHasComTail = [urlStr hasSuffix:@"com"];
if(isHasComTail)
{
//dosomething
}
else
{
//dosomething
}
练习:
请判断下面这个字符串是不是手机号,(第一位是不是1) 4008517517
请判断,下面这个是不是个邮箱地址(最后是不是.com||.net)
BOOL isMobilePhone = [@"4008517517" hasPrefix:@"1"];
if(isMobilePhone){
NSLog(@"是手机");
}
else
{
NSLog(@"不是手机");
}
BOOL isEmail = [@"pp@qq.cn" hasSuffix:@".com"];
BOOL isEmailToo = [@"pp@qq.cn" hasSuffix:@".net"];
if(isEmail || isEmailToo)
{
NSLog(@"是邮箱");
}
else
{
NSLog(@"不是邮箱");
}
二、NSMutableString 可变字符串(内容)
注意:NSMutableString的爸爸就是NSString,所以上面的方法,下面都可以用
1、实例化并初始化
NSMutableString *muStr = [[NSMutableString alloc] initWithCapacity:0];//设置可变字符串的空间,不管这里设置为多少,未来用到的时候不够用,会自动申请更多的空间
NSMutableString *muStrClass = [NSMutableString stringWithCapacity:0];
//永远也不要用可变的对象去直接指一个内容,而是往里装
NSLog(@"啥也没有的时候%@",muStr);
2、增
[muStr appendString:@"pp"];//想可变字符串增加一个字符串
NSLog(@"%@",muStr);
appendFormat:@"%d",23];
NSLog(@"%@",muStr);
//上面两个方法是在后面增
//加塞的方法
[muStr insertString:@"&" atIndex:1];
NSLog(@"%@",muStr);
//变成P&PPP23
[muStr insertString:@"pp" atIndex:3];
NSLog(@"%@",muStr);
//变成p&ppp23的说
appendString:@"的说"];
NSLog(@"%@",muStr);
3、改,把第一个参数这个区域的字符串改成第二个参数的字符串
//改成p@qqp23的说
[muStr replaceCharactersInRange:NSMakeRange(1, 3) withString:@"@qq"];
NSLog(@"%@",muStr);
//改成pm23的说
[muStr replaceCharactersInRange:NSMakeRange(1, 4) withString:@"m"];
NSLog(@"%@",muStr);
//改成pm2.5的说
[muStr replaceCharactersInRange:NSMakeRange(3, 1) withString:@".5"];
NSLog(@"%@",muStr);
//另一种改法,简单!!!! 禁用!!!!
//改成我们少制造点pm2.5吧
[muStr setString:@"我们少制造点pm2.5吧"];
NSLog(@"%@",muStr);
4、删
//删成我们少2吧
[muStr deleteCharactersInRange:NSMakeRange(3, 5)];
NSLog(@"%@",muStr);
[muStr deleteCharactersInRange:NSMakeRange(4, 2)];
NSLog(@"%@",muStr);
//1、请做一个可变字符串
//2、增加为我是人
//3、增加为我是人民币
//4、增加为我是一元人民币
//5、修改为我是大好人
//6、修改为我是大大的好人
//7、删除成我好
NSMutableString *lastStr = [NSMutableString stringWithCapacity:0];
appendString:@"我是人"];
appendString:@"民币"];
[lastStr insertString:@"一元" atIndex:2];
[lastStr replaceCharactersInRange:NSMakeRange(2, 5) withString:@"大好人"];
[lastStr replaceCharactersInRange:NSMakeRange(2, 1) withString:@"大大的"];
[lastStr deleteCharactersInRange:NSMakeRange(1, 4)];
[lastStr deleteCharactersInRange:NSMakeRange(2, 1)];
NSLog(@"%@",lastStr);
//请把下面字符串里面的“国军”、“日本“、”中南海“变成XXXX
//今天是国庆节,我们观看了中国军队的大阅兵,管理台上有日本来的客人,这些日本人最后被带进了中南海。
NSMutableString *japanStr = [NSMutableString stringWithCapacity:0];
[japanStr appendString:@"今天是国庆节,我们观看了中国军队的大阅兵,管理台上有日本来的客人,这些日本人最后被带进了中南海"];
while ([japanStr rangeOfString:@"国军"].location != NSNotFound) {
[japanStr replaceCharactersInRange:[japanStr rangeOfString:@"国军"] withString:@"XXXX"];
}
while ([japanStr rangeOfString:@"日本"].location != NSNotFound) {
[japanStr replaceCharactersInRange:[japanStr rangeOfString:@"日本"] withString:@"XXXX"];
}
while ([japanStr rangeOfString:@"中南海"].location != NSNotFound) {
[japanStr replaceCharactersInRange:[japanStr rangeOfString:@"中南海"] withString:@"XXXX"];
}
NSLog(@"%@",japanStr);
作业:
1、使用alloc和类方法分别创建2个NSString
2、创建一个内容为“我们爱”的NSString字符串,然后使用format方法向这个字符串拼接“学习”,然后使用stringByAppendingString的方法向这个字符串拼接“ios”
3、计算“123456789”这个字符串的长度
4、判断“今天下雨了”和“今天下 雨了”这两个字符串是否相等,再判断“abc”和“Abc”是否相等
5、比较“abcd”与“Abcd”谁大谁小,再不区分大小比较这两个字符串谁大谁小
6、把“hello”通过大小写转为“HELLO”,再通过大小写转为“hello”,最后使用首字母大写转为“Hello”
7、在“少壮不努力,老大徒伤悲”中查找是否有“老大”这个字符串,如果有打印“老大”在这个字符串的位置和长度
8、规则:如果有http://的开头,同时还有.com的结尾,则这个字符串是一个网页地址
判断
www.baidu.com
http://www.baidu.com
http://www.yahoo.cn
是不是一个网址,是的话打印成功,不是的话打印失败
9、把<SSF123N DSAFAS8 123109 SADFD ADF090 ADFDN3>中的字母提取出来,也就是去掉空格和“<”、“ ”、“>”这三个符号
SSF123NDSAFAS8
10、创建一个可变字符串,内容是“123-456-789-000”,使用可变字符串的方法,将他变为“123456789”
11、创建一个可变字符串,内容是“今日事”,然后改为“今日事,今日毕”,再改为“今日事,必须今日毕”,再改为“今日事,今日毕”(禁用setString)