字符串分为两种:
1.不可变字符串:NSString 会产生一个新的字符串,一般方法会返回NSString *
2.可变字符串:NSMutableString 都是对自身内容进行修改,在访问的时候字符串已经发生改变,一般没有返回值
************************不可变字符串*******************************
1.创建字符串对象方法:
(1)字面量
NSString *str = @"杨林dfssfsdg";
(2)通过自定义初始化方式创建(系统不推荐)
NSString *str = [[NSString alloc]init]; //创建空字符串
NSString *str = [[NSString alloc]initWithString:@"liushanshan"]; //赋初值字符串
NSLog(@"%@", str); //输出
(3)利用系统提供的便利构造器的方法
NSString *str =[NSString stringWithString:@"姗姗"];
2.NSString的使用方法(1)substring 截取字符串3种
substringFromIndex从第几位开始,到字符串结束(包括下标位置)
substringToIndex 从第0位开始到当前位置(不包括下标位置)
NSRange 有范围的截取: NSRange是一个结构体,提供了两个成员变量,一个是起始位置,一个是长度
NSString *str = @"nihao,wodemingzijiaoliushanshan";
NSLog(@"%@", [str substringFromIndex:5]);
NSLog(@"%@", [str substringToIndex:5]);
NSRange range = {3, 7};
NSLog(@"%@", [str substringWithRange:range]);
NSLog(@"%@",[str substringWithRange:NSMakeRange(3, 7)]);
(2判断是否有前缀 hasPrefix
NSString *str = @"liushanshan";
NSString *prefix = @"li";
NSLog(@"%d", [str hasPrefix:prefix]);
有为1,没有为0(3)把字符串变为基本数据类型 Value
NSString *strNum = @"123sf45";
NSInteger num = [strNum integerValue];
NSLog(@"%ld", num);
结果为:123 注意:遇到字母后,从字母开始到结尾都不打印
(4)把基本数据类型转换成字符串
stringWithFormat: 该方法可以吧任意类型转换成字符串类型,还可以进行拼接
CGFloat g = 3.14;
NSInteger a = 100;
NSString *str = [NSString stringWithFormat:@"%ld%g%@", a, g, @"lish"];
NSLog(@"%@", str);
(5)小写字母变大写字母 uppercaseString
NSString *str = @"liushanshan";
NSLog(@"%@", str.uppercaseString)
(6)大写字母变小写字母 lowercaseString
NSString *str2 = @"li uT Tns han";
NSLog(@"%@", str2.lowercaseString);
(7)单词首字母大写 capitalizedString
注意:只有每一个单词首字母是大写,其余全是小写(以前单词中有大写的也变小写)
NSString *str2 = @"heLLo,woRd";
NSLog(@"%@", str2.capitalizedString);
结果:Hello,Word(8)比较 compare
对应的结果只有三个,一个是ASC升序,结果为-1;一个是same,结果为0;一个是降序DESC,结果为1
NSString *str = @"nihao";
NSString *newStr = @"buhao";
NSLog(@"%ld", [str compare:newStr]);
结果:1(9)字符串的拼接
NSString *str = @"liushanshan";
NSString *str1 = @"yanglin";
NSString *newStr = [str stringByAppendingString:str1];
NSLog(@"%@", newStr);
结果为:liushanshanyanglin(10)替换
第一个参数:字符串原有的内容
第二个参数:要替换的内容
NSString *str = @"刘珊珊没事玩玩游戏";
NSString *newStr = [str stringByReplacingOccurrencesOfString:@"刘" withString:@"杨"];
NSLog(@"%@", newStr);
结果:杨姗姗没事玩玩游戏
(11)比较字符串内容是否相同 相同为1,不同为0NSString *str1 = @"nihao";
NSString *str2= @"nihao";
NSLog(@"%d", [str1 isEqualToString:str2]);
结果:1
11.截取
NSString *endTime = @"sddfwefgwsdffdg";
NSString *newEnd = [endTime substringFromIndex:10];
NSLog(@"%@", newEnd);
结果:dffdg
****************************可变字符串*******************************
NSMutableString: 是NSString的子类,一般对自身进行操作
注意:字面量的方式创建的是不可变字符串,不可用该方法创建可变字符串,只可以拿不可变的指针来接受1.创建可变字符串
(1)初始化方式
NSMutableString *str =[[NSMutableString alloc]init]; //赋空值
NSMutableString *str = [[NSMutableString alloc]initWithString:@"tengfei"];// 创建并赋值
NSLog(@"%@", str);
(2)便利构造器方式
NSMutableString *str = [NSMutableString stringWithString:@"shangshuai"];
NSLog(@"%@", str);
2.可见字符串使用方法(1)插入
NSMutableString *str = [NSMutableStringstringWithString:@"nihao,wodemingzi jiao yanglin"];
[str insertString:@"商帅" atIndex:3];
NSLog(@"%@", str);
(2)替换
NSMutableString *str = [NSMutableString stringWithString:@"nihao,wodemingzi jiao yanglin"];
[str replaceCharactersInRange:NSMakeRange(3, 1) withString:@"商帅" ];
NSLog(@"%@", str);
注意:第一个参数为替换位置,第二个为所替换的字符串所占的长度,如为1,则占用被替换字符串一个字符空间,如为0,则不占用,只需要在替换位置直接插入即可
(3)全部替换NSMutableString *str = [NSMutableString stringWithString:@"nihao,wodemingzi jiao yanglin"];
[str setString:@"woshi"];
NSLog(@"%@", str);
结果:woshi
(4)拼接(同不可变的比较)
NSMutableString *str = [NSMutableString stringWithString:@"nihao,wodemingzi jiao yanglin"];
[str appendString:@"商帅"];
NSLog(@"%@", str);
例题:
给定一个图片文件名,判断字符串是否以"png"结尾,如果是就替换成"jpg",不是就拼接".jpg"
NSString *name = @"shangshuai.avi";
if ([name hasSuffix:@"png"]) {
name = [name stringByReplacingOccurrencesOfString:@".avi"withString:@".jpg"];
}else{
name = [name stringByAppendingString:@".jpg"];
}
NSLog(@"%@", name);
******************有关NSLog*****************
NSString *str = @"杨林dfertfsdg";
NSLog(@"%ld", str.length); //字符串的长度 11
NSLog(@"%c", [str characterAtIndex:3]); //通过指定下标,获取字符内容 f
NSLog(@"%C", [str characterAtIndex:1]); //打印汉字用大的%C 林