/*______________NSString(不可变字符串)________________*/
//---------1.字符串的创建-------
//创建字符串常量
NSString *string1 = @"hello";
string1 = @"hello world";
//创建字符串
NSString *string2 = [[NSString alloc] initWithString:@"hello"];
NSString *string3 = [[NSString alloc] initWithFormat:@"hello %@",string2];
NSLog(@"string1 = %@", string1);
NSLog(@"string2 = %@", string2);
NSLog(@"string3 = %@", string3);
NSString *s1 = @"张三";
NSString *s2 = @"李四";
NSString *s3 = @"王五";
//Format字符串拼接
NSString *s4 = [[NSString alloc] initWithFormat:@"%@,%@,%@", s1, s2, s3];
NSLog(@"%@",s4);
//--------------2.字符串的比较-------------
NSString *string5 = @"abcd";
NSString *string6 = @"88888";
NSString *string7 = @"abcd";
/* if (!(string5 == string6)) {
NSLog(@"密码不正确");
}*/
//上述这样比较字符串的内容的方法是不行的,因为这是在比较两个字符串的指针地址是否相同。
//以下是比较两个内容是否相同的方法
if ([string5 isEqualToString:string6]) {
NSLog(@"密码正确");
}
else
NSLog(@"密码不正确");
//系统自动优化,内容相同的字符串会存在栈上的同一个地址里
if (string5 ==string7) {
NSLog(@"字符串常量相同的同指向一个地址");
}
//以上的比较方法是因为直接创建的字符串常量是存在栈上。
NSString *string8 = [[NSString alloc] initWithFormat:@"abc %@",string5];
NSString *string9 = [[NSString alloc] initWithFormat:@"abc %@",string7];
//以上两个字符串变量是存在堆上的,栈上有两个指针指向其,但是和视频上的讲的不一样,视频上显示两个字符串的地址是不同的,而这里显示是相同的,预测Format也是直接在栈上建立的。
if (string8 == string9) {
NSLog(@"字符串常量内容相同,指向同一个地址");
}
//isEqualToString比较字符串内容时区分大小写
if ([string8 isEqualToString:string9]) {
NSLog(@"内容相同");
}
NSString *string10 = @"zhangsan";
NSString *string11 = @"ZHANGSAN";
//NSComparisonResult 结果是一个枚举,有升序、降序和相等
NSComparisonResult result = [string10 caseInsensitiveCompare:string11];
if (result == NSOrderedSame) {
NSLog(@"忽略大小写,内容一样");
}
NSString *string12 = @"abc";
NSString *string13 = @"abc"; //数值也可以比较
//compare 比较区分大小写
NSComparisonResult result2 = [string12 compare:string13];
if (result2 == NSOrderedDescending)
NSLog(@"a > b");
else if (result2 == NSOrderedSame)
NSLog(@"a = b");
else
NSLog(@"a < b");
//-----------------3.字符串的其他用法----------------------
//length:获取字符串的长度
NSString *string14 = @"abcdef";
NSInteger l = [string14 length];
NSLog(@"%ld", l);
//转大写、小写
NSString *string15 = @"hELLo1";
//uppercaseString把小写全部转成大写,数字不变
NSString *string16 = [string15 uppercaseString];
NSLog(@"%@", string16);
//lowercaseString把大写全部转成小写
NSString *string17 = [string15 lowercaseString];
NSLog(@"%@", string17);
//capitalizedString把字符串首字母大写,其他小写
NSString *string18 = [string15 capitalizedString];
NSLog(@"%@", string18);
//Value把字符串转成基本数据类型:浮点型,整型,进行帮助运算
NSString *string19 = @"3.14";
int f = [string19 intValue];
float d = [string19 floatValue];
double e = [string19 doubleValue];
NSLog(@"%d %f %f", f, d, e);
NSString *string20 = @"2";
BOOL b = [string20 boolValue];
NSLog(@"%d",b);
//字符串的截取
NSString *string21 = @"abcdef";
NSString *string22 = [string21 substringFromIndex:3];//from从某一个位置开始截取到字符串末尾(包含某一位置)
NSLog(@"%@", string22);
NSString *string23 = [string21 substringToIndex:3];//to从字符串开头截取到某一位置,(不包含某一位置)
NSLog(@"%@", string23);
NSRange range = NSMakeRange(1, 4); //1:指定位置 4:需要截取的字符长度
NSRange range1 = {2,4};
NSString *string24 = [string21 substringWithRange:range];
NSLog(@"%@ %@", string24, [string21 substringWithRange:range1]);
//字符串的追加
NSString *string25 = @"Android";
NSString *string26 = @" iOS";
//字符串的追加,新创建一个对象的引用,用Format拼接法可以实现
NSString *string27 =[[NSString alloc] initWithFormat:@"%@%@",string25, string26];
NSString *string29 = [string25 stringByAppendingFormat:@"%@%d",string26,7];
NSLog(@"%@ %@", string27, string29);
//用追加法就不用写那么长代码那么麻烦,追加完后返回一个新的字符串,需创建一个新的字符串接收
NSString *string28 = [string25 stringByAppendingString:@" iOS"];
NSLog(@"%@", string28);
//字符串的查找
NSString *string30 = @"www.iphonetrain.con/ios.html";
NSRange rg = [string30 rangeOfString:@"htm"];
if (rg.location != NSNotFound) {
NSLog(@"location:%ld length:%ld",rg.location,rg.length);
}
else
NSLog(@"查找失败");
//通过下标取得对应的字符
NSString *string31 = @"abcdef";
unichar c = [string31 characterAtIndex:4];
NSLog(@"%c", c);
/*_______________NSMutableString(可变字符串)________________*/
// NSMutableString *str1 = @"zifuchuan"; 错误,此处是创建一个NSString对象
NSMutableString *st2 = [[NSMutableString alloc] initWithString:@"我王栋珍"];
//在原有的字符串st2的基础上插入
[st2 insertString:@"爱" atIndex:1];
NSLog(@"%@",st2);
//在原有的字符串st2的基础上追加,这时候的原有字符串已经发生改变
[st2 appendString:@"forever"];
NSLog(@"%@",st2);
NSMutableString *st3 = [[NSMutableString alloc] initWithString:@"我不是很爱王栋珍"];
//由于本人一时手误多打了两个字,其实我很爱她,删除“不是”,先查找“不是”的范围,然后将其删除
NSRange range3 = [st3 rangeOfString:@"不是"];
[st3 deleteCharactersInRange:range3];
NSLog(@"%@",st3);
//由于本人又一次手误打了一个名字,现在要将第一个“王栋珍”改成“伍聃文”,字符串替换
NSMutableString *st4 = [[NSMutableString alloc] initWithString:@"王栋珍很爱王栋珍"];
NSRange range4 = [st4 rangeOfString:@"王栋珍"];
//发现一个问题,当一个字符串出现两段同样需要查找的文字时他只会按顺序显示下标靠前的字符串,那么这里就只能改成“伍聃文很爱王栋珍”,而不能改成“王栋珍很爱伍聃文”,好吧,亲,让你占一次便宜噢
// NSLog(@"location:%ld length:%ld", range4.location, range4.length);
[st4 replaceCharactersInRange:range4 withString:@"伍聃文"];
NSLog(@"%@",st4);