字符串是我们最经常用到的数据类型之一
在C语言中,字符串是由一排的字符组成字符串,然后用指针进行操作。
在OC中,字符串是对象,更加方便操作。在这里值得一提的是,字符串的引用计数问题。
字符串常量的引用计数是-1,因为是放在常量池里。 只有字符串变量的引用计数才大于等于0。
以下列举了几种常见的字符串创建方法:
//1.直接赋值,常量池
NSString * str =@"this is a string";
NSLog(@"%d",str.retainCount);
//2.先开辟空间,初始化,再赋值,常量池
NSString * str = [[NSStringalloc]init];
str = @"this is a string";
NSLog(@"%d",str.retainCount);
//3.开辟空间,调用初始化方法,常量池
NSString * str = [[NSStringalloc]initWithString:@"this is a string"];
NSLog(@"%d",str.retainCount);
//4.从UTF-8编码格式的字符串创建字符串对象,未在常量池中
NSString * str = [[NSStringalloc]initWithUTF8String:"this is a string"];
NSLog(@"%d",str.retainCount);
//5.创建格式化的字符串(占位符是%加上代表类型的字符组成),未在常量池中
NSString * str = [NSStringstringWithFormat:@"%@",@"this is a string"];
NSLog(@"%d",str.retainCount);
//6.从文件读取字符串
NSString * path = @"/Users/ibokan/Desktop/test.txt";
//如果在枚举里没有对应的编码,则需要自己转码
//NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSError * error = nil;
NSString * str = [NSString stringWithContentsOfFile:path encoding:4 error:&error];
if (error != nil) {
NSLog(@"读取文件失败,错误信息:%@",[error localizedDescription]);
}else{
NSLog(@"读取成功,文件内容为:%@",str);
}
//7.从URL读取字符串,不在常量池里
NSError * error = nil;
//url很广泛,可以用于http地址,可以ftp地址,可以文件地址
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
//NSURL * url = [NSURL URLWithString:@"file:Users/ibokan/Desktop/test.txt"];
NSString * str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error != nil) {
NSLog(@"读取文件失败,错误信息:%@",[error localizedDescription]);
}else{
NSLog(@"读取成功");
}
NSLog(@"\n%d",str.retainCount);
字符串写入文件:
//字符串写入文件。path为服务端地址,也可以向服务端写入,但是一般不这么用
NSString * str = @"that is a string";
NSError * error = nil;
NSString * path = @"/Users/ibokan/Desktop/baidu.txt";
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error != nil) {
NSLog(@"保存文件失败,错误信息:%@",[error localizedDescription]);
}else{
NSLog(@"保存成功");
}
字符串除了拿来显示,还可以用来比较,匹配,查找:
//1.字符串比较,调用C的strcmp函数,s1>s2返回值>0 ,s1=s2 返回值=0 , s1<s2 返回值<0
char * str1 ="string";
char * str2 ="strjng";
printf("%d",strcmp(str1, str2));
//2.NSString的compare方法,类似于C的strcmp函数,s1>s2返回值>0, s1=s2 返回值=0, s1<s2 返回值<0
NSString * str1 = @"string";
NSString * str2 = @"sting";
NSLog(@"%d",[str1compare:str2]);
//3.NSString的compare方法,忽略大小写比较
NSString * str1 = @"string";
NSString * str2 = @"String";
NSLog(@"%d",[str1caseInsensitiveCompare:str2]);
//4.NSString的compare方法,忽略大小写比较长度,用options的参数来用
NSString * str1 = @"string";
NSString * str2 = @"Strings";
NSLog(@"%d",[str1compare:str2 options:NSNumericSearch|NSCaseInsensitiveSearch]);
//5.两个字符串进行匹配,str1有包含str2,则返回一个nsrange结构体。只能简单匹配,更复杂的需要用正则。
NSString * str1 = @"That is a string";
NSString * str2 = @"string";
NSRange strRange = [str1 rangeOfString:str2];
NSLog(@"起始位置为:%d,长度为:%d",strRange.location,strRange.length);
//6.查找前缀,一定是从头开始,类似于正则的^
NSString * str = @"http://www.baidu.com";
NSLog(@"%i",[str hasPrefix:@"www"]);
//7.查找后缀,类似于正则的$,用于匹配文件类型非常好用
NSString * str = @"http://www.baidu.com";
NSLog(@"%i",[str hasSuffix:@"com"]);
//8.取拓展名
NSString *Path = @"~/json.txt";
NSLog(@"Extension:%@",[Path pathExtension]);
//9.取缩写,不知道什么用,留个记号
NSString *Path = @"~/json.txt";
NSString *absolutePath = [Path stringByExpandingTildeInPath];
NSLog(@"absolutePath:%@",absolutePath);
NSLog(@"Path:%@",[Path stringByAbbreviatingWithTildeInPath]);
字符串截取操作:
//1.从前面开始截取字符串到第几个字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringToIndex:3];
NSLog(@"string2:%@",string2);
//2.从第几个字符开始截取字符串
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringFromIndex:3];
NSLog(@"string2:%@",string2);
//3.从第几个字符开始截取几个字符串
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringWithRange:NSMakeRange(10,3)];
NSLog(@"string2:%@",string2);
字符串的拼接操作:
//1.连接字符串
NSString * str1 = @"This is a string";
NSString * str2 = @"Hello world";
NSString * str3 = [str1 stringByAppendingString:str2];
NSLog(@"str3:%@",str3);
//2.连接字符串,使用格式符
NSString * str1 = @"This is a string";
NSString * str2 = @"Hello world";
NSString * str3 = [str1 stringByAppendingFormat:@",%d,%@",123,str2];
NSLog(@"str3:%@",str3);
接下来是插入,这里要注意,这里的是可变字符串:
//1.可变字符串,插入一个新字符串,这里要注意下标不要越界
NSMutableString * str = [[NSMutableString alloc]initWithCapacity:0];
[str insertString:@"this is a mutableString" atIndex:0];
[str insertString:@"1233" atIndex:1];
NSLog(@"%@",str);
//2.可变字符串,追加一个字符串
NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];
[str appendString:@"HELLO,WORLD"];
NSLog(@"%@",str);
//3.可变字符串,赋值
NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];
[str setString:@"123"];
NSLog(@"%@",str);
//4.可变字符串,删除一个范围
NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];
[str deleteCharactersInRange:NSMakeRange(1, 2)];
NSLog(@"%@",str);
//5.可变字符串,替换一个范围的字符串
NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];
[str replaceCharactersInRange:NSMakeRange(1, 2) withString:[NSString stringWithFormat:@"99999"]];
NSLog(@"%@",str);
//6.可变字符串,替换所有出现过的字符串,在制定长度里
NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];
int result = [str replaceOccurrencesOfString:@"s" withString:@"123" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 13)];
NSLog(@"替换了%d个字符串,新的字符串为:%@",result,str);
//1.修改大小写的方法
NSString *string1 = @"A String";
NSString *string2 =@"StrIng,this is a string";
//全部改大写
NSLog(@"string1:%@",[string1uppercaseString]);
//全部改小写
NSLog(@"string2:%@",[string2lowercaseString]);
//首字母大写,其余小写
NSLog(@"string2:%@",[string2capitalizedString]);
字符串的方法很多。本文只是列举一些常用的。