ios NSSting / NSMutableString
NSString: 对象放于代码区(用@创建的都放)
#######1.创建对象并初始化或赋值(3种)
1.NSString *str = [[NSString alloc]init]; //空字符串,没有意义,NSString创建的是常量,保存在代码区
2.NSString *str1 = @“Hello World"; NSString *str2 = @“Hello World"; //@自动生成一个对象,是一个对象运算符,同一对象只会保留一份
3.NSString *str = [NSString stringWithFormat:@"%@ World %d",@"Hello", 10]; //stringWithFormat:此时就不是同一个对象了, 人为%d的对象不确定,所以就不会分配为同地址
#######2.拼接方法:
NSString *str = [[NSString alloc]initWithFormat:@"%@ %@",str1, str2 ]; //初始化拼接
NSString *str = [str1 stringByAppendingString: str2]; //追加拼接
NSString *str = [str1 stringByAppendingFormat:@"%@ %d %@”, str2, 123, str3]; //格式化拼接,插入化拼接可以将数值转为字符串再拼接
3.替换:(会生成另一个字符串)
NSString *str = [str1 stringByReplacingCharactersInRange:NSMakeRange(4, 10) withString:@" tedu"];
4. 判断:
[str1 isEqualToString:user]
5. 用占位符%@输出自定义类的对象(在类中实现)
重写方法:description
//描述
-(NSString *)description
{
NSString *str = [NSString stringWithFormat:@"姓名:%@,年龄:%d,性别:%@,家庭住址:%@", self.name, self.age,self.gender?@"男":@"女", self.address];
return str;
}
6.判断字符串是否为空字符的方法 :
//method 1 空对象
if (string == nil || string == NULL) {}
//method 2 空方法
if ([string isKindOfClass:[NSNull class]]) {}
//method 3 长度为空
if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {}
#######7、判断字符串里面是否包含某字符:
// 1 、rangeOfString
NSString *str1 = @"can you \n speak English";
NSString *str = @"\n";
//在str1这个字符串中搜索\n,判断有没有
if ( [str1 rangeOfString:str].location != NSNotFound ) {
NSLog(@"这个字符串中有\n");
}
//rangeOfString 前面的参数是要被搜索的字符串,后面的是要搜索的字符
//NSNotFound 表示请求操作的某个内容或者item没有发现,或者不存在
//2、hasPrefix / hasSuffix
-(BOOL) hasPrefix:(NSString *) astring;检查字符串是否以astring开头;
-(BOOL) hasSuffix:(NSString *) astring;检查字符串是否以astring结尾;
使用方式:
NSString [*filename=@"hello,world](mailto:*filename=@)";
if([filename hasPrefix:@"hello"]){...}
if([filename hasSuffix:@"world"]){...}
//补充:
-(NSRange) rangeOfString:(NSString *) astring; //将rangeOfString:发送给一个NSString对象时,传递的参数时要查找的字符串。它会返回一个NSRange struct来告诉你一个与这个字符串相匹配的部分从哪里开始以及匹配上的字符个数。
typedef struct _NSRange {
NSUInteger location; //表示该范围的起始位置
NSUInteger length; //表示该范围内的长度
} NSRange;
// 这个函数比较特殊 返回一个NSRange的对象。
NSMakeRanger(unsigned int location,unsigned int length);
NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
NSRange r;
r.location = loc;
r.length = len;
return r;
}
例如:
NSRange range = NSMakeRanger(0,5);
NSLog(@"location is %d,length is %d",range.location,range.length);
8、 输出大写或者小写字符串
NSString *string1 = @"A String";
NSString *string2 = @"String";
NSLog(@"string1:%@",[string1 uppercaseString]);//大写
NSLog(@"string2:%@",[string2 lowercaseString]);//小写
NSLog(@"string2:%@",[string2 capitalizedString]);//首字母大小
9、从字符串的开头一直截取到指定的位置,但不包括该位置的字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringToIndex:3];
NSLog(@"string2:%@",string2);
10、以指定位置开始(包括指定位置的字符),并包括之后的全部字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringFromIndex:3];
NSLog(@"string2:%@",string2);
11、按照所给出的位置,长度,任意地从字符串中截取子串
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringWithRange:NSMakeRange(0, 4)];
NSLog(@"string2:%@",string2);
12、在指定位置插入字符串
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@"This is a NSMutableString"];
[String1 insertString:@"Hi! " atIndex:0];
NSLog(@"String1:%@",String1);
13、用指定字符串替换字符串中某指定位置、长度的字符串
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@"This is a NSMutableString"];
[String1 replaceCharactersInRange:NSMakeRange(0, 4) withString:@"That"];
NSLog(@"String1:%@",String1);
14、扩展路径
NSString *Path = @"~/NSData.txt";
NSString *absolutePath = [Path stringByExpandingTildeInPath];
NSLog(@"absolutePath:%@",absolutePath);
NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]);
15、文件扩展名
NSString *Path = @"~/NSData.txt";
NSLog(@"Extension:%@",[Path pathExtension]);
15、characterAtIndex:指定下标的字符
UniChar a1 = [str11 characterAtIndex:2];
NSLog(@"a1 = %hd",a1);
16、依据给定字符裁剪字符串
NSString * str15 = @"affaf, rq, 41wre";
NSArray * array = [str15 componentsSeparatedByString:@" "];
NSLog(@"%@",array);
NSMutableString:
可变字符串,是NSString类的子类,对象放于堆区,(增加了以下3种方法)
1. 创建方法:
1、NSMutableString *str = [[NSMutableString alloc] init]; //添加字符的时候会导致低效率
2、NSMutableString *str = [NSMutableString stringWithCapacity:100]; //预估计,不是上限,突破100就会导致低效率(创建空间与增加空间需要时间的,alloc 与realloc 都是需要时间的)
3、NSMutableString *str = @"abc"; //str3会退化为不可变字符串,不能这样初始化可变字符串(不能算创建可变字符串)
4、NSMutableString *str = [NSMutableString stringWithString:@"string"]; //创建可变字符串的对象的同时进行初始化
5、NSMutableString *str = [NSMutableString stringWithFormat:@"age:%d", 6]; //创建可变字符串对象的同时进行格式化初始
2. 添加(字符)方法:
[str2 appendString:@"The word, string"]; //在末尾添加字符串
[str6 appendFormat:@"has %lu characters",(unsigned long)str6.length]; //有format是支持把数字转为字符的
3. 删除(字符)方法:
[str7 deleteCharactersInRange:NSMakeRange(14, 10)]; //删除指定区域内字符串(数的麻烦)
[str7 deleteCharactersInRange:[str7 rangeOfString:@" OBjective-C”]]; //只会删除一个,删完要用循环 ,[str7 rangeOfString:@" OBjective-C”] //确定子串的范围等同于NSMakeRange(14, 10)
4. 替换(字符)方法: (在原来字符串上替换)
[str8 replaceCharactersInRange:[str8 rangeOfString: @"a"] withString:@"another"]; //将a替换为another
补充:
找位置:(用开头字符与字符串长度来确定位置)
自数:NSMakeRange(4, 10) 带参宏
不用数:[str7 rangeOfString:@" OBjective-C”] ,确定字符串位置
注:可变类的对象创建在堆区(方便扩展), 不可变类的对象创建在代码区
(有什么不正确的地方欢迎来电骚扰)
成功的三大原则:
1、坚持
2、不要脸
3、坚持不要脸