1.字面量:一般是固定不变的用双引号引起来,双引号中的内容可以自己进行任意的定义
在OC中一般通过str.length来获取指定的下标的字符内容.
注意在OC中如果想要打印汉子只要用%加上大写的C就行,%c则是用来打印其他字符.
当程序出现错误的时候,在下方的执行框中找到reason开始查找问题,但是一旦数组越界程序会立刻崩溃,所以数组要严谨不越界
用便利构造器和初始化方法创建字符串对象是可以,也能正常使用,但是系统还是倾向于用字面量的方式来完成对象的创建
2.substring 截取字符串
substringFromIndex从那一个下标开始截取一直到最后,包括下标的位置
substringFromIndex从哪开始截取,到最后,包括下标位置
NSString *str = @"nihao, wodemingzijiaoliushanshan";
NSLog(@"%@", [str substringFromIndex:5]);
reason:2015-07-20 17:43:39.077 OC05_NSString[1827:153292] , wodemingzijiaoliushanshan
substringToIndex从头开始到哪结束,包括下标
NSLog(@"%@", [str substringToIndex:10]);
reason:2015-07-20 17:43:39.078 OC05_NSString[1827:153292] nihao, wod
NSRange 是一个结构体,提供了两个成员变量,一个是location起始位置,还有一个是长度即截取的长度
NSRange range = {3, 7};
NSLog(@"%@", [str substringWithRange:range]);
reason:2015-07-20 17:43:39.078 OC05_NSString[1827:153292] ao, wod
NSLog(@"%@", [str substringWithRange:NSMakeRange(4, 8)]);
reason:2015-07-20 17:43:39.078 OC05_NSString[1827:153292] o, wodem
3.判断两个字符串内容是否相同
使用isEqualToString比较的是字符串里面的内容,而使用if(str = str1){};比较的则是字符串的地址是否相同.并且isEqualToString返回的是一个BOOL值,如果相同返回1不同返回0.
NSString *str1 = @"杨林";
NSString *str2 = @"杨林";
NSLog(@"%d", [str1 isEqualToString:str2]);
reason:2015-07-20 17:50:45.131 OC05_NSString[1836:155572] 1
4.判断是否有前后缀
hasPreFix和hasSuffix的返回值类型相同都是BOOL型,前者判断是否有前缀,后者判断是否有后缀,前后缀可以自己进行定义如下:NSString *str = @"liushanshan";
NSString *p = @"li";
NSString *p2 = @"an";
NSLog(@"%d", [str hasPrefix:p]);
NSLog(@"%d", [str hasSuffix:p2]);
reason:2015-07-20 17:52:49.148 OC05_NSString[1852:156337] 1
reason:2015-07-20 17:52:49.149 OC05_NSString[1852:156337] 1
5.把字符串->基本数据类型
NSString *strNum = @"1234p5";
NSInteger num = [strNum integerValue];
NSLog(@"%ld", num);
integerValue把字符串转换为基本的整形数据类型,当遇到第一个非整形数字时结束
reason:2015-07-20 17:55:19.547 OC05_NSString[1860:157191] 1234
stringWithFormat: 方法可以把任意类型转换成字符串类型,可以进行拼接,即将不同类型的字符串放在一起
CGFloat g = 3.14;
NSInteger a = 100;
NSString *str = [NSString stringWithFormat:@"%ld, %g, %@", a, g, @"刘珊珊"];
NSLog(@"%@", str);
reason:2015-07-20 17:55:19.548 OC05_NSString[1860:157191] 100, 3.14, 刘珊珊
6.字符串的大小写设置
uppercaseString 所有的字符都大写
lowercaseString 所有的字符都小写
capitalizedString 首字母大写,其余小写
NSString *str = @"liu ShanshAn";
NSLog(@"%@", str.uppercaseString);
NSLog(@"%@", str.lowercaseString);
NSLog(@"%@", str.capitalizedString);
reason:
2015-07-20 18:00:46.853 OC05_NSString[1911:159338] LIU SHANSHAN
2015-07-20 18:00:46.853 OC05_NSString[1911:159338] liu shanshan
2015-07-20 18:00:46.854 OC05_NSString[1911:159338] Liu Shanshan
7.字符串的比较
对应只有三个结果,一个是ASC升序结果是-1,一个是same相同结果是0,降序DESC,结果是1.这里的升序降序指的是ASSIC表中字符的对应的十进制大小
NSString *str = @"nihao";
NSString *newStr = @"buhao";
NSLog(@"%ld", [str compare:newStr]);
reason:2015-07-20 19:07:00.626 OC05_NSString[1944:167838] 1
NSString *str1 = @"buhao";
NSString *newStr1 = @"nihao";
NSLog(@"%ld", [str1 compare:newStr1]);
reason:2015-07-20 19:07:00.627 OC05_NSString[1944:167838] -1
NSString *str2 = @"buhao";
NSString *newStr2 = @"buhao";
NSLog(@"%ld", [str2 compare:newStr2]);
reason:2015-07-20 19:07:00.627 OC05_NSString[1944:167838] 0
8.字符串的拼接
通过stringByAppendingString把两个字符串拼接到一起,stringByAppendingString前面是要拼接的字符串后面是拼接上的内容
NSString *str11 = @"商帅爱";
NSString *str12 = @"刘星宇";
NSString *newstr = [str11 stringByAppendingString:str12];
NSLog(@"%@", newstr);
reason: 2015-07-20 19:13:10.879 OC05_NSString[1952:170029] 商帅爱刘星宇
9.替换
NSString *str = @"商帅没事穿裙子";
NSString *strNew = [str stringByReplacingOccurrencesOfString:@"没事withString:@"最爱"];
NSLog(@"%@", strNew);
在替换时需要传递两个参数,第一个是需要被替换的内容,第二个参数是替换的内容
reson:2015-07-20 19:18:37.099 OC05_NSString[1968:172374] 商帅没事穿裙子 替换前
reson:2015-07-20 19:18:37.099 OC05_NSString[1968:172374] 商帅最爱穿裙子 替换后
10.NSMutableString可变字符串
在OC中NSString是不可变的字符串,NSMutableString则是可变字符串,它是NSString的子类.所以NSString有的特性它都有,NSMutableString同样也能使用NNString中的方法如下,其执行结果也和NSString一样:
NSMutableString *str = [[NSMutableString alloc] init];
在使用字面量创建时,创建的是不可变的字符串,只能用不可变的指针来接收NSMutableString *str = [[NSMutableString alloc] initWithString:@"俊宝宝"];
NSLog(@"%@", str);
NSMutableString *str1 = [NSMutableString stringWithString:@"商帅"];
NSLog(@"%@", str1);
reason:2015-07-20 19:35:53.079 OC05_NSString[2003:178095] 俊宝宝
reason:2015-07-20 19:35:53.080 OC05_NSString[2003:178095] 商帅
需要注意在OC中"-"是对象用的,"+"是类用的."()"里是返回值类型
11.插入
NSMutableString *str = [NSMutableString stringWithString:@"nihao,wodemingzijiaoClare"];
[str insertString:@"俊宝宝" atIndex:3];
NSLog(@"%@", str);
NSMutableString *str1 = [NSMutableString stringWithString:@"俊宝宝"];
reason:2015-07-20 19:44:52.474 OC05_NSString[2014:180170] nih俊宝宝ao,wodemingzijiaoClare
12.范围的替换
[str1 replaceCharactersInRange:NSMakeRange(2, 1)withString:@"王"];
NSLog(@"%@", str1);
reason:2015-07-20 19:44:52.475 OC05_NSString[2014:180170] 俊宝王
13.拼接
NSString *str2 = @"大熊";
NSString *newStr2 = [str2 stringByAppendingString:@"哆啦A梦"];
NSLog(@"%@", newStr2);
reason:2015-07-20 19:44:52.475 OC05_NSString[2014:180170] 大熊哆啦A梦
可变字符串在方法上一般都是没有返回值的,都是对自身的内容进行修改,在访问的时候字符串已经发生了变化,但是不可变字符串会产生一个新的字符串,一般方法会返回NSString *.
练习:给定一个图片文件名,判断字符串中是否以“png”结尾,如果是就替换成“jpg”,如果 不是,就拼接”.jpg”。
NSString *pic = @"商帅不要脸.png";
NSString *sur = @".png";
NSString *newpic;
if ([pic hasSuffix:sur]) {
newpic = [pic stringByReplacingOccurrencesOfString:@"png" withString:@"jpg"];
} else {
newpic = [pic stringByAppendingString:@".jpg"];
}
NSLog(@"%@", newpic);
reason:2015-07-20 19:44:52.476 OC05_NSString[2014:180170] 商帅不要脸.jpg
NSString *name = @"商帅不要脸.avi";
if ([name hasSuffix:@"avi"]) {
name = [name stringByReplacingOccurrencesOfString:@".avi" withString:@".png"];
} else {
name = [name stringByAppendingString:@".jpg"];
}
NSLog(@"%@", name);
return 0;
}
reason:2015-07-20 19:44:52.476 OC05_NSString[2014:180170] 商帅不要脸.png