objective-c学习之字符串!

来源:互联网 发布:通达信软件怎么样 编辑:程序博客网 时间:2024/04/29 05:21

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);//结果为ec、字符串的遍历    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的时候他们俩几乎没有什么区别。

以上这则其余记载摘录与另一位博友的博客!如有侵权,请通知我删除!

0 0
原创粉丝点击