Objective-C第五章Foundation框架的字符串与可变字符串
你好!我是小柒,今天咱们一起学习一下Foundation框架的字符串与可变字符串加油哦!
字符串
本节内容
1、Foundation框架
2、字符串
3、可变字符串
回顾:
小柒什么是框架?
答:由许多类、方法、函数组成的一个类库。以便于开发者更方便的开发程序。
小柒什么是Foundation框架?
答:Foundation框架是OC语言的基础类库。此框架中的类都是以“NS”为前缀,便于与其他类区分开。
Foundation常用类的创建
1)、alloc创建
NSNumber *number1 = [[NSNumber alloc] initWithInt:100];
2)、类方法创建
NSNumber *number2 = [NSNumber numberWithInt:100];
// 类方法的创建对象,方法名以类名为前缀。
// 两种方式的区别主要是内存管理方式不同,后面内存管理时会讲。
从咱们第一天开始讲C和OC都提到了字符串,当然也用到了字符串。
小柒回忆一下C语言的字符串和OC的字符串有哪些区别?
C语言printf("Hello, World!\n");OC语言NSLog(@"Hello, World!");里面的Hello, World!就是字符串只是C没有@符,但是得加\n,且OC自动换行。
OC的字符串分为NSString不可变和NSMutableString可变两种。
NSString字符串的内容定义以后是不能修改的,是不可变的。
不可变字符串NSString
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//———————————————————创建字符串————————————————————
// 1.快速创建
NSString *str1 = @"这是一个字符串";
NSLog(@"str1 = %@",str1);
// 2.alloc创建的字符串
// 报黄了,原因是他已经被第一种代替了
NSString *str2 = [[NSString alloc] initWithString:@"已经被第一种代替了"];
NSLog(@"str2 = %@",str2);
// 3.创建
int a = 100;
NSString *str3 = [[NSString alloc] initWithFormat:@"创建: a = %d",a];
NSLog(@"str3 = %@",str3);
// 4.类方法创建
NSString *str4 = [NSString stringWithFormat:@"类方法创建:a = %d",a];
NSLog(@"str4 = %@",str4);
//——————————————————————字符串比较—————————————————
// 1.比较字符串地址是否相同
NSString *str5 = [NSString stringWithFormat:@"字符串"];
NSString *str6 = [NSString stringWithFormat:@"字符串"];
// 判断地址str5 == str6
if (str5 == str6) {
NSLog(@"str5 == str6");
}else{
NSLog(@"str5 != str6");
}
// 2.比较内容是否相同
NSString *str7 = [NSString stringWithFormat:@"字符串"];
NSString *str8 = [NSString stringWithFormat:@"字符串"];
// 比较内容用isEqualToString
BOOL isSame = [str7 isEqualToString:str8];
if (isSame) {
NSLog(@"字符串内容相同");
}
// 3.字符串大小比较caseInsensitiveCompare
NSString *str9 = [NSString stringWithFormat:@"字符串"];
NSString *str10 = [NSString stringWithFormat:@"1字符串"];
NSComparisonResult result = [str9 caseInsensitiveCompare:str10];
// 生序:str9和str10的比较过程,以str9为基准,str10大于str9就是生序。例如,数字9和10相比,10比9多1,可以理解为:在9的基础上涨了1,涨了就是生序
if (result == NSOrderedAscending) {
NSLog(@"生序:str9 < str10");
// 相同就是一样
}else if (result == NSOrderedSame) {
NSLog(@"内容相同");
// 降序:str9和str10的比较过程,以str9为基准,str10小于str9就是降序。例如,数字9和8,以9比8少1,可以理解为:在9的基础上减少1,减少就是降序
} else if (result == NSOrderedDescending){
NSLog(@"降序:str9 > str10");
}
// 访问字符串长度
NSString *str11 = @"ABCD";
int len = [str11 length];
NSLog(@"str11 = %@",str11);
NSLog(@"len = %d",len);
//————————————————————字符串转换———————————————————
// 1.大小写转换
NSString *str12 = @"hello WORLD";
// 全部大写uppercaseString
NSLog(@"%@",[str12 uppercaseString]);
// 全部小写lowercaseString
NSLog(@"%@",[str12 lowercaseString]);
// 首字母大写capitalizedString
NSLog(@"%@",[str12 capitalizedString]);
// 2.转换为基本数据类型
NSString *str13 = @"10";
// 字符串转换为整型intValue
int i = [str13 intValue];
NSLog(@"i = %d",i);
NSString *str14 = @"10.25";
// 字符串转换为单精度浮点floatValue
float f = [str14 floatValue];
NSLog(@"f = %.2f",f);
NSString *str15 = @"11.03";
// 字符串转换为双精度浮点doubleValue
double d = [str15 doubleValue];
NSLog(@"d = %.2f",d);
NSString *str16 = @"1";
// 字符串转换为BOOL
BOOL bl = [str16 boolValue];
if (bl) {
NSLog(@"正确");
}else{
NSLog(@"不正确");
}
//——————————————————字符串截取—————————————————————
// 1.分割字符串
NSString *str17 = @"Q,E,W,R";
// 用数组分割字符componentsSeparatedByString
NSArray *array = [str17 componentsSeparatedByString:@","];
NSLog(@"str17 = %@",str17);
NSLog(@"array = %@",array);
// 2.访问指定位置字符
NSString *str18 = @"wasdijkl";
// 用characterAtIndex取字符位置
char st = [str18 characterAtIndex:1];
NSLog(@"st = %c",st);
// 3.截取到指定位置
NSString *str19 = @"abcdefg";
// 截取索引为3前面的字符串
NSString *str20 = [str19 substringToIndex:3];
NSLog(@"str19 = %@",str19);
NSLog(@"str20 = %@",str20);
// 4.从指定位置截取到末尾
NSString *str21 = @"abcdefg";
// 截取索引为3后面的字符串
NSString *str22 = [str21 substringFromIndex:3];
NSLog(@"str22 = %@",str22);
// 5.指定范围截取
NSString *str23 = @"abcdefg";
// 用NSRange结构体里的NSMakeRange(位置,长度);
NSRange range = NSMakeRange(1, 4);
NSString *str24 = [str23 substringWithRange:range];
NSLog(@"str23 = %@",str23);
NSLog(@"str24 = %@",str24);
//——————————————————字符串拼接—————————————————————
NSString *str25 = @"abc";
NSString *str26 = @"def";
// 1.用stringWithFormat将字符串str25和str26拼接到一起
NSString *str27 = [NSString stringWithFormat:@"%@%@",str25,str26];
NSLog(@"str27 = %@",str27);
// 2.用stringByAppendingString将字符串str28和str29拼接到一起
NSString *str28 = @"abc";
NSString *str29 = @"def";
NSString *str30 = [str28 stringByAppendingString:str29];
NSLog(@"str30 = %@",str30);
// 3.用stringByAppendingFormat追加字符串
NSString *str31 = @"abc";
NSString *str32 = @"def";
NSString *str33 = [str31 stringByAppendingFormat:@"%@",str32];
NSLog(@"str32 = %@",str33);
//————————————————————查找字符串———————————————————
NSString *email = @"123456@qq.com";
NSString *str34 = @"@qq.com";
// 在字符串email中查找str34
NSRange range1 = [email rangeOfString:str34];
// 符合要求
if (range1.location != NSNotFound) {
NSLog(@"%@包含%@是一个合格的邮箱",email,str34);
// 符不符合要求
}else{
NSLog(@"没有找到邮箱");
}
//————————————————————替换字符串———————————————————
NSString *email1 = @"123456@qq.com";
NSString *str35 = [email1 stringByReplacingOccurrencesOfString:@"qq.com" withString:@"136.com"];
NSLog(@"str35 = %@",str35);
}
return 0;
}
打印结果:
2016-01-04 14:14:51.928 Task1[4926:130869] str1 = 这是一个字符串
2016-01-04 14:14:51.929 Task1[4926:130869] str2 = 已经被第一种代替了
2016-01-04 14:14:51.929 Task1[4926:130869] str3 = 创建: a = 100
2016-01-04 14:14:51.930 Task1[4926:130869] str4 = 类方法创建:a = 100
2016-01-04 14:14:51.930 Task1[4926:130869] str5 != str6
2016-01-04 14:14:51.930 Task1[4926:130869] 字符串内容相同
2016-01-04 14:14:51.930 Task1[4926:130869] 降序:str9 > str10
2016-01-04 14:14:51.930 Task1[4926:130869] str11 = ABCD
2016-01-04 14:14:51.930 Task1[4926:130869] len = 4
2016-01-04 14:14:51.930 Task1[4926:130869] HELLO WORLD
2016-01-04 14:14:51.930 Task1[4926:130869] hello world
2016-01-04 14:14:51.930 Task1[4926:130869] Hello World
2016-01-04 14:14:51.930 Task1[4926:130869] i = 10
2016-01-04 14:14:51.931 Task1[4926:130869] f = 10.25
2016-01-04 14:14:51.931 Task1[4926:130869] d = 11.03
2016-01-04 14:14:51.931 Task1[4926:130869] 正确
2016-01-04 14:14:51.931 Task1[4926:130869] str17 = Q,E,W,R
2016-01-04 14:14:51.931 Task1[4926:130869] array = (
Q,
E,
W,
R
)
2016-01-04 14:14:51.931 Task1[4926:130869] st = a
2016-01-04 14:14:51.931 Task1[4926:130869] str19 = abcdefg
2016-01-04 14:14:51.931 Task1[4926:130869] str20 = abc
2016-01-04 14:14:51.932 Task1[4926:130869] str22 = defg
2016-01-04 14:14:51.932 Task1[4926:130869] str23 = abcdefg
2016-01-04 14:14:51.932 Task1[4926:130869] str24 = bcde
2016-01-04 14:14:51.932 Task1[4926:130869] str27 = abcdef
2016-01-04 14:14:51.932 Task1[4926:130869] str30 = abcdef
2016-01-04 14:14:51.932 Task1[4926:130869] str32 = abcdef
2016-01-04 14:14:51.932 Task1[4926:130869] 123456@qq.com包含@qq.com是一个合格的邮箱
2016-01-04 14:14:51.932 Task1[4926:130869] str35 = 123456@136.com
小柒提醒你一定要背下来。
可变字符串
NSMutableString是可变字符串,可以修改字符串中的内容.
@interface NSMutableString : NSString 继承关系
可变字符串NSMutableString
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//——————————————————插入字符串—————————————————————
NSMutableString *mutableString = [NSMutableString stringWithString:@"字符串"];
NSLog(@"mutableString = %@",mutableString);
// 用insertString插入字符串
[mutableString insertString:@"可变" atIndex:0];
NSLog(@"mutableString = %@",mutableString);
//——————————————————删除字符串—————————————————————
NSMutableString *mutableString1 = [NSMutableString stringWithString:@"卡特琳娜连招QEWR"];
NSLog(@"mutableString1 = %@",mutableString1);
// 范围删除deleteCharactersInRange
NSRange range = NSMakeRange(2, 2);
[mutableString1 deleteCharactersInRange:range];
NSLog(@"mutableString1 = %@",mutableString1);
//——————————————————追加字符串—————————————————————
NSMutableString *mutableString2 = [NSMutableString stringWithString:@"字符串"];
NSLog(@"mutableString2 = %@",mutableString2);
// appendString追加字符串
[mutableString2 appendString:@"追加"];
NSLog(@"mutableString2 = %@",mutableString2);
}
return 0;
}
打印结果:
2016-01-04 14:49:02.882 Task[5372:146126] mutableString = 字符串
2016-01-04 14:49:02.883 Task[5372:146126] mutableString = 可变字符串
2016-01-04 14:49:02.883 Task[5372:146126] mutableString1 = 卡特琳娜连招QEWR
2016-01-04 14:49:02.883 Task[5372:146126] mutableString1 = 卡特连招QEWR
2016-01-04 14:49:02.884 Task[5372:146126] mutableString2 = 字符串
2016-01-04 14:49:02.884 Task[5372:146126] mutableString2 = 字符串追加
小柒美好的时光总是短暂的,今天的字符串就学完了,记得预习数组和可变数组,加油哦!