1、字符串的创建
NSString *string1 = @"hello";
a、实例方法创建字符串【对象 方法】
NSString *string2 = [[NSString alloc] initWithString:string1];
NSLog(@"string2 = %@",string2);
b、类方法创建字符串【类名 方法】
NSString *string3 = [[NSString stringWithString:string1];
NSLog(@"string3 = %@",string3);
2、字符串格式化创建并且拼接
NSString *string4 = @"张三";
NSString *string5 = @"李四";
a、实例方法创建
NSString *string4 = [[NSString alloc] initWithFormat:@"%@--@",s1,s2];
NSLog(@"string4 = %@",string4);
b、类方法创建
int age = 20;
NSString *string5 = [NSString stringWithFormat:@"%@的年龄是%d",s1,age];
NSLog(@"string5 = %@",string5);
3、字符串的比较
NSString *s5 = @"abcd";
NSString *s6 = @"abcd";
if(s5 == s6){//这里判断的是s5和s6的指针地址是否相同,并不是比较其中的字符串
NSLog(@"s5的内存与s6的内存地址相等");
}else
{
NSLog(@"s5的内存和s6的内存地址不相等");
}
NSLog(@"s5的内存地址是%p",s5);//打印指针地址用%p
NSLog(@"s6的内存地址是%p",s6);
a、isEqualToString方法:字符串内容比较,一般都用这个方法,是区分大小写
NSString *temps5 = [NSString stringWithFormat:@"abc%@",@"D"];
BOOL isEqual = [s5 isEqualToString:tempS5];
if(isEqual){
NSLog(@"s5与temps5内容一样");
}else
{
NSLog(@"s5与temps5内容不一样");
}
b、不区分大小写的比较方法
NSComparisonResult result = [s5 caseInsensitiveCompare:temps5];
if(result == NSOrderedSame){
NSLog(@"不区分大小写后,s5与temps5内容一样
}
4、输入大写或者小写字符串
NSString *s11 = @"This is a oc";
NSString *s12 = @"Objective";
NSLog(@"%@",[s11 uppercaseString]);//全部输出大写
NSLog(@"%@",[s12 lowercaseString]);//全部输出小写
NSLog(@"%@",[s12 capitalizedString]);//首字母大写输出
5、字符串的追加
NSString *s13 = @"hello";
NSString *s14 = @"world";
a、直接追加字符串
NSString *string13 = [s13 stringByAppendingString:s14];//这里的s14也可以直接为字符串
b、格式化追加字符串,比直接追加好,直接追加只能追加一个参数,格式化追加可以追加多个参数
NSString *string14 = [s13 stringByAppendingFormat:@"%@%d",s14,14];
6、字符串的查找
a、
NSString *s15 = @"www.csdn.net";
NSRange = [s15 rangeOfString:@"net"];//rangOfString前面的参数是被查找的字符串,后面的参数是需要查找字符串,此句意思就是在s15里面找net,这里的net也可以改为定义的其他字符串的名字
NSLog(@"%ld,%ld",range.location,range.length);//这里的location和length都是range结构体里。可以直接调用,打印出的结果为10 3,location从0开始算起
b、判断是否查找到
if(range.location != NSNotFound){//这里的NSNotfound在oc中是个宏定义,为LONG_MAX,意为一个最大的数,这个数只随32位和64位机器的改变才改变
NSLog(@"找到");
}else{
NSLog(@"没找到");
}
7、字符串的截取
a、
NSString *s18 = @"http://www.csdn.net";
NSString *string18 = [s18 substringToIndex:4];//截取前部分,从开头开始,也就是0位开始,但是取值不包括4这个位置,所以截取的结果为http
NSString *string19 = [s18 substringFromIndex:5];//截取后部分,从指定的位置开始,截取到结束,但包括了指定位置,也就是包括了5,截取的结果为//www.csdn.net
NSRange range = {2,5};//定义取值的位置和长度2表示location,5表示length
NSString *string20 = [s18 substringWithRange:range];//表示从第二位开始截取5个字符,但是不包括2这个位置,结果为tp://
b、字符串中取单个元素
NSString *s19 = @"qwerfasdhf";
char c = [s19 characterAtIndex:2];//通过下标取元素,这里取下标为2的元素,下标从0开始
NSLog(@"%c",c);//结果为e
c、字符串的遍历
for (int i = 0;i < s19.length;i++){
char c1 = [s19 characterAtIndex:i];
NSLog(@"%c",c1);
}
8、字符串与基本数据类型转换
a、\\int float double bool ---> NSString
int age1 = 14;
NSString *intStr = [NSString stringWithFormat:@"%d",age1];\\将int转换为NSString,使用的是创建格式化字符串的类方法
NSString *floatStr = [NSString stringWithFormat:@"%f",19.00];\\将float转换为NSString
NSLog(@"%@,%@",intStr,floatStr);
b、NSString --> Int Float
int q = [intStr intValue];//将NSString强制转换为int
float z = [floatStr floatValue];//将NSString强制转换为float
c、转换后即可进行运算
int k = q + z;
d、也可以强制转换为bool类型
BOOL isTure = [floatStr boolValue];
NSLog(@"isTure = %d",isTure);//打印结果为1,因非0即为1
9、查询字符串是否包含
NSString *s20 = @"http://csdn.net";
BOOL isPre = [s20 hasPrefix:@"http"];//判断是否包含前缀http,也就是开头字母是不是http,返回值为bool值
if(isPre){
NSLog(@"包含前缀");
}else
{
NSLog(@"不包含前缀");
}
BOOL isSuf = [s20 hasSuffix:@"net"];//判断是否包含后缀net,也就是从最后一位开始看,往前找,看是不是最后三位为net
if(issue){
NSLog(@"包含后缀");
}else
{
NSLog(@"不包含后缀");
}
10、compare方法:字符串比较,三种返回值
NSString *s7 = @"This is a String";
NSString *s8 = @"Tis is a String";
NSComparisonResult result1 = [s7 compare:s8];//这里定义的result1必须为NSComparisonResult型,因为这个是其枚举类型的返回值,如果写bool类型的话,会导致升序的返回值无法传入bool,因为bool只有0和1,而升序也就是NSOrderedAscending的返回值为-1,就没办法写入bool,经测试只能够写NSComparisonResult
if (result1 == NSOrderedSame) {
NSLog(@"s7 = s8");
}else if (result1 == NSOrderedAscending)
{
NSLog(@"s7<s8");
}else if (result1 == NSOrderedDescending)
{
NSLog(@"s7>s8");
}
其余记载:
stringWithFormat和initWithFormat的区别
+stringWithFormat:类方法,返回一个autorelease的NSString实例,不用手动Release,在自动释放池中会自动释放
-initWithFormat:实例方法,返回一个自己申请内存的NSString实例,根据OC内存管理黄金法则,管杀管埋,它则需要自己手动Release
因为这两个方法只是在没有使用ARC的时候有所不同,一个需要手动Release,一个则是自动进去autoreleasepool,所以在使用ARC的时候他们俩几乎没有什么区别。
以上这则其余记载摘录与另一位博友的博客!如有侵权,请通知我删除!