NSString字符串
- 通过不同方式创建的字符串,字符串对象存储的位置也不一样
- 如果是通过字符串常量创建,那么字符串对象存储在常量区中
- 如果是通过alloc initiWithFormat/stringWithFormat创建,那么字符串对象存储在堆区中
- 注意:
- 不同的平台存储的方式也不一样,如果是Mac平台系统会自动对字符串对象进行优化
- 不同的编译器存储的方式也不一样
1.通过字符串常量创建
如果通过字符串常量创建字符串对象,并且字符串常量的内容一致,那么如果创建多个字符串对象,多个对象指向同一块存储空间
NSString *str1 = @"lxc";
NSString *str11 = @"lxc";
2.通过alloc init 创建
只要调用了alloc就会在堆内存中开辟一块存储空间
NSString *str2 = [[NSString alloc]initWithFormat:@"lxc"];
NSString *str22 = [[NSString alloc]initWithFormat:@"lxc"];
3.通过类工厂方法创建/stringWithFormat
内部其实就是封装了alloc init
NSString *str3 = [NSString stringWithFormat:@"lxc"];
NSString *str33 = [NSString stringWithFormat:@"lxc"];
- file:文件路径
- encoding:编码英文 一般情况下UTF-8
- error:如果读取错误,会将错误新保存到error中,如果读取正确,就没有error = nil
- 如果error = nil代表正确,就正常执行
- 如果不是的话就打印一下错误信息,[error localizedDescription]
//从文件中读取字符串
NSString *path = @"/Users/yao/Desktop/LXC.text";
NSError *error = nil;
//从文件中读取字符串
NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (error == nil) {
NSLog(@"string = %@",string);
}else
{
NSLog(@"error = %@",[error localizedDescription]);
}
//把字符串写入到文件中
NSString *str = @"LXC is every cool";
NSString *path2 = @"/Users/yao/Desktop/LXC.text";
//atomically 如果传入YES,字符串写入文件的过程中没有写完,那么不会生成文件
// 如果传入NO,字符串写入文件的过程中如果没有写完,会生成文件
BOOL flag = [str writeToFile:path2 atomically:YES encoding:NSUTF8StringEncoding error:nil];
字符串比较
NSString *str1 = @"abc";
NSString *str2 = @"abc";
//比较两个字符串的"内容"是否相同
BOOL flag =[str1 isEqualToString:str2];
//比较两个字符串的"地址"是否相同
flag = (str1 == str2);
//比较两个字符串的大小
switch ([str1 compare:str2]) {
case NSOrderedAscending:
NSLog(@"st1<str2");
break;
case NSOrderedSame:
NSLog(@"st1=str2");
break;
case NSOrderedDescending:
NSLog(@"st1>str2");
break;
}
//忽略大小写进行比较
switch ([str1 caseInsensitiveCompare:str2]) {
case NSOrderedAscending:
NSLog(@"st1<str2");
break;
case NSOrderedSame:
NSLog(@"st1=str2");
break;
case NSOrderedDescending:
NSLog(@"st1>str2");
break;
}
字符串搜索
NSString *str1 = @"www.baidu.com";
//判断一个字符串前缀是否匹配,不匹配就返回0
if ([str1 hasPrefix:@"www"]) {
NSLog(@" have www");
}
//判断一个字符串是否以什么结尾,不是就返回0
if ([str1 hasSuffix:@"com"]) {
NSLog(@" have com");
}
//判断一个字符串是否包含什么,会返回一个location代表字符串的位置,还会返回一个length代表字符串的长度
NSRange range = [str1 rangeOfString:@"baidu"];
if (range.length ==0) {
NSLog(@"字符串中不包含baidu");
}else
{
NSLog(@"字符串中包含baidu");
}
字符串截取
//1.动态获取字符串的位置,location +1 就等于>的位置+1就是lxc
NSUInteger location = [str1 rangeOfString:@">"].location +1;
//2.动态获取字符串的长度,NSBackwardsSearch是倒叙截取
NSUInteger length = [str1 rangeOfString:@"<" options:NSBackwardsSearch].location - location;
NSRange range = {location,length};
//3.截取字符串,根据动态获取的字符串位置和字符串长度
NSString *newStr1 = [str1 substringWithRange:range];
NSLog(@"newStr1 = %@",newStr1);
//从第几位开始截取,一直截取到最后
NSString *newStr2 = [str1 substringFromIndex:6];
NSLog(@"newStr2 =%@",newStr2);
//从开始截取,一直截取到什么位置
NSString *newStr3 = [str1 substringFromIndex:6];
NSLog(@"newStr3 =%@",newStr3);