创建字符串的三种方式:
第一种:我们比较常用的创建方式,
NSString *str =@"king"; //这种方式我们叫字面量
第二种:
NSString *s = [[NSStringalloc]init];
NSString *s1 = [[NSStringalloc]initWithString:@"queen"];
使用这种方法也可以创建一个字符串,但是会报一个异常,因为现在已经不推荐使用这种alloc,initWithString来创建一个字符串对象
第三种:就是用便利构造器来创建,
NSString*str = [NSStringstringWithString:@“nihao”];用他创建出现的警告和alloc一样,系统还是推荐使用第一种字⾯面量的方式来创建
NSString的常用方法
我们先创建一个对象,
NSString *str = @"queen"; //OC里没有'\0'
获取字符串⻓长度:
我们打印长度来,NSLog(@"%ld", str.length); // 属性length是一个readonly的属性
获取⼦字符串
判断是否有前缀
NSLog(@"%d", [str hasPrefix:@"qu"]);
NSLog(@"%d", [str hasSuffix:@"en"]); //后缀
也可以使用点语法调用,hasPrefix和hasSuffix的返回值是BOOL
截取字符串
NSString *result = [str substringFromIndex:1];//从index开始,包括index
NSString *result = [str substringToIndex:3];//到index结束,不包括index
NSRange range = {1, 3};//第一个是起始位下标,第二个是长度,下标都从0开始,
// NSRange是结构体
NSString *result = [str substringWithRange:range];
NSLog(@"%@", result);
拼接字符串
NSString *str = @"queen";
NSInteger a = 520;
CGFloat b = 3.14;
// ***** 拼接字符串
//这种方法可以把任意类型的内容,转换成字符串
NSString *newStr = [NSString stringWithFormat:@"king love %@%ld%g",str, a, b];
NSLog(@"%@", newStr);
可以用该方法实现转换
//把任意类型转换成字符类型
NSString *newStr1 = [NSString stringWithFormat:@"%ld", a];
NSLog(@"%@", newStr1);
//整形与字符相互转换
NSString *c = @"100";
NSInteger str2 = [c integerValue];
NSLog(@"%ld", str2);
替换字符串
NSString *str = @"queen";
字符串的替换...只有是对应的替换内容都会替换 如:e->kk
NSString *newStr = [str stringByReplacingOccurrencesOfString:@"e" withString:@"kk"];
NSLog(@"%@", newStr);
字符串相等
NSString *str1 = @"queen";
NSString *str = @"queen";
//isEqualToString方法字符串内容的比较 内容!!!只能比较相等
if ([str isEqualToString:@"queen"]) {
NSLog(@"一样");
}else{
NSLog(@"no");
}
if (str == str1) {//地址
NSLog(@"地址相等");
}else{
NSLog(@"地址不相等");
} //这里str和str1地址是相等的,因为两个指针都指向queen的区域,queen相当于存储在常量区里,
queen的地址是不会改变的,能改变的只是指针的指向
字符串比较
// 字符串的比较(能进行排序,equal只能判断内容相等),返回值类型为枚举,-1,0,1;
NSString *str = @"ebc";
NSString *aStr = @"bcd";
NSLog(@"%ld", [str compare:aStr]);
NSComparisonResult result1 = [str compare:aStr];
NSLog(@"%ld", result1);
可变字符串
NSMutableString *str =@"king";
// 如果拿字面量来创建一个字符串的话,是不可变字符串(NSString),有警告,所以使用以下两种
//初始化方法
NSMutableString *str1 = [[NSMutableStringalloc]initWithString:@"king"];
NSLog(@"%@", str1);
//便利构造器
NSMutableString *str2 = [NSMutableStringstringWithString:@"queen"];
[str1 insertString:str2atIndex:1]; //在下标的前面插入,该方法无返回值,所有直接对str1进行修改
NSLog(@"%@", str1);
NSRange r = {1,3};
[str1 deleteCharactersInRange:r];//从下标开始删除范围的长度
NSLog(@"%@", str1);
[str1 deleteCharactersInRange:NSMakeRange(1, 2)];
NSLog(@"%@", str1);
//NSMakeRange 可以和 NSRange 替换
// 注意返回值类型
NSMutableString *str = [NSMutableStringstringWithString:@"kingqueen"];
[str substringFromIndex:1]; //返回值类型为NSString
NSString *newStr = [strsubstringFromIndex:1];
NSLog(@"%@", newStr);
//不可变数组
NSString *s =@"king";
NSArray *arr = [[NSArrayalloc] initWithObjects:s,@"2", @"3", @"4",@"5", @"6", nil];
NSLog(@"%@", arr);//对象的占位符为%@
NSLog(@"%ld", arr.count);
NSLog(@"%@", [arrobjectAtIndex:0]);
NSLog(@"%@", arr[0]);
//崩溃先看reason,养成习惯
for (int i = 0; i < arr.count; i++) {
NSLog(@"%@", [arrobjectAtIndex:i]);
NSLog(@"%@", arr[i]);
}
//用遍历构造器创建一个数组对象
NSArray *arr = [NSArray arrayWithObjects:@"king",@"queen", @"joker",@"dota", nil];
//字面量
NSArray *arr1 = @[@"king",@"queen", @"joker",@"dota"];
Student *stu1 = [[Studentalloc] init];
Student *stu2 = [[Studentalloc] init];
Student *stu3 = [[Studentalloc] init];
Student *stu4 = [[Studentalloc] init];
Student *stu5 = [[Studentalloc] init];
NSArray *arr = [NSArray arrayWithObjects:stu1, stu2, stu3, stu4, stu5,nil];
//要保证数组里的所有元素都是对象类型
Student *temp = [arr objectAtIndex:2];
可变数组
NSMutableArray *arr = [[NSMutableArrayalloc]init];
NSMutableArray *arr1 = [[NSMutableArrayalloc]initWithObjects:@"k",@"q",nil];
NSMutableArray *arr2 = [NSMutableArrayarrayWithObjects:@"a",@"b",nil];
//给数组添加一个对象
[arr1 addObject:@"sss"];
//把数组内的所有元素添加到另一个数组中
[arr1 addObjectsFromArray:arr2];
//插入
[arr1 insertObject:@"j"atIndex:2];
//移除
[arr1removeObject:@"j"]; //移除元素j
[arr1 removeObjectAtIndex:2]; //移除对应下标的对象
[arr1 removeLastObject]; //移除最后一个元素
// [arr1 removeAllObjects]; //清空数组
//替换
[arr1 replaceObjectAtIndex:3withObject:@"aaa"];
//交换
[arr1 exchangeObjectAtIndex:0withObjectAtIndex:1];
NSLog(@"%ld", arr1.count);
NSLog(@"%@", arr1);
快速枚举 for-in
for (Student *tempStu in stuArr) {
if ([tempStu.name isEqual: @"aaa"]) { //两个字符串的比较
tempStu.score = 95.0;
}
NSLog(@"%g", tempStu.score);
}
NSArray *arr1 = [NSArray arrayWithObjects:@"1",@"2", @"3",@"4", @"5",nil];
NSArray *arr2 = [NSArrayarrayWithObjects:@"6",@"7", @"8", @"9",@"10", nil];
NSArray *arr = [NSArray arrayWithObjects:arr1, arr2,nil];
for (NSArray *tempArrin arr) {
// NSLog(@"%@", tempArr);
for (NSString *strin tempArr) {
NSLog(@"%@", str);
}
}
// NSRange range = {1, 2};
//
// NSInteger a = 10;
// NSNumber *number = [NSNumber numberWithInteger:a];
// NSLog(@"%@", number);
// // number->integer
// NSInteger b = [number integerValue];
// NSLog(@"%ld", b);
//数组里边只有放对象才不会有问题
// NSArray *arr = [NSArray arrayWithObjects:a, nil];
//NSValue
//把结构体转换成对象
NSRange range = {1, 2};
NSValue *value = [NSValue valueWithRange:range];
NSLog(@"%@", value);
int *p = NULL;
NSValue *pointerValue = [NSValue valueWithPointer:p];
NSLog(@"%@", pointerValue);
好吧,内容太多,整理有麻烦