IOS的NSString详解

字符串是我们最经常用到的数据类型之一

在C语言中,字符串是由一排的字符组成字符串,然后用指针进行操作。

在OC中,字符串是对象,更加方便操作。在这里值得一提的是,字符串的引用计数问题。

字符串常量的引用计数是-1,因为是放在常量池里。 只有字符串变量的引用计数才大于等于0。

以下列举了几种常见的字符串创建方法:

    //1.直接赋值,常量池

    NSString * str =@"this is a string";

    NSLog(@"%d",str.retainCount);

    

    //2.先开辟空间,初始化,再赋值,常量池

    NSString * str = [[NSStringalloc]init];

    str = @"this is a string";

    NSLog(@"%d",str.retainCount);

    

    //3.开辟空间,调用初始化方法,常量池

    NSString * str = [[NSStringalloc]initWithString:@"this is a string"];

    NSLog(@"%d",str.retainCount);

    

    //4.UTF-8编码格式的字符串创建字符串对象,未在常量池中

    NSString * str = [[NSStringalloc]initWithUTF8String:"this is a string"];

    NSLog(@"%d",str.retainCount);

    

    //5.创建格式化的字符串(占位符是%加上代表类型的字符组成),未在常量池中

    NSString * str = [NSStringstringWithFormat:@"%@",@"this is a string"];

    NSLog(@"%d",str.retainCount);

    

    //6.从文件读取字符串

    NSString * path = @"/Users/ibokan/Desktop/test.txt";

    //如果在枚举里没有对应的编码,则需要自己转码

    //NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

    NSError * error = nil;

    NSString * str = [NSString stringWithContentsOfFile:path encoding:4 error:&error];

    if (error != nil) {

        NSLog(@"读取文件失败,错误信息:%@",[error localizedDescription]);

    }else{

        NSLog(@"读取成功,文件内容为:%@",str);

    }


    //7.URL读取字符串,不在常量池里

    NSError * error = nil;

    //url很广泛,可以用于http地址,可以ftp地址,可以文件地址

    NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];

    //NSURL * url = [NSURL URLWithString:@"file:Users/ibokan/Desktop/test.txt"];

    NSString * str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

    if (error != nil) {

        NSLog(@"读取文件失败,错误信息:%@",[error localizedDescription]);

    }else{

        NSLog(@"读取成功");

    }

    NSLog(@"\n%d",str.retainCount);


字符串写入文件:

    //字符串写入文件。path为服务端地址,也可以向服务端写入,但是一般不这么用

    NSString * str = @"that is a string";

    NSError * error = nil;

    NSString * path = @"/Users/ibokan/Desktop/baidu.txt";

    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];

    if (error != nil) {

        NSLog(@"保存文件失败,错误信息:%@",[error localizedDescription]);

    }else{

        NSLog(@"保存成功");

    }


字符串除了拿来显示,还可以用来比较,匹配,查找:

    //1.字符串比较,调用Cstrcmp函数,s1>s2返回值>0 ,s1=s2 返回值=0 , s1<s2 返回值<0

    char * str1 ="string";

    char * str2 ="strjng";

    printf("%d",strcmp(str1, str2));

    //2.NSStringcompare方法,类似于Cstrcmp函数,s1>s2返回值>0, s1=s2 返回值=0, s1<s2 返回值<0

    NSString * str1 = @"string";

    NSString * str2 = @"sting";

    NSLog(@"%d",[str1compare:str2]);


    //3.NSStringcompare方法,忽略大小写比较

    NSString * str1 = @"string";

    NSString * str2 = @"String";

    NSLog(@"%d",[str1caseInsensitiveCompare:str2]);


    //4.NSStringcompare方法,忽略大小写比较长度,options的参数来用

    NSString * str1 = @"string";

    NSString * str2 = @"Strings";

    NSLog(@"%d",[str1compare:str2 options:NSNumericSearch|NSCaseInsensitiveSearch]);

    

    //5.两个字符串进行匹配,str1有包含str2,则返回一个nsrange结构体。只能简单匹配,更复杂的需要用正则。

    NSString * str1 = @"That is a string";

    NSString * str2 = @"string";

    NSRange strRange = [str1 rangeOfString:str2];

    NSLog(@"起始位置为:%d,长度为:%d",strRange.location,strRange.length);


    //6.查找前缀,一定是从头开始,类似于正则的^

    NSString * str = @"http://www.baidu.com";

    NSLog(@"%i",[str hasPrefix:@"www"]);


    //7.查找后缀,类似于正则的$,用于匹配文件类型非常好用

    NSString * str = @"http://www.baidu.com";

    NSLog(@"%i",[str hasSuffix:@"com"]);


    //8.取拓展名

    NSString *Path = @"~/json.txt";

    NSLog(@"Extension:%@",[Path pathExtension]);


    //9.取缩写,不知道什么用,留个记号

    NSString *Path = @"~/json.txt";

    NSString *absolutePath = [Path stringByExpandingTildeInPath];

    NSLog(@"absolutePath:%@",absolutePath);

    NSLog(@"Path:%@",[Path stringByAbbreviatingWithTildeInPath]);



字符串截取操作:

    //1.从前面开始截取字符串到第几个字符

    NSString *string1 = @"This is a string";

    NSString *string2 = [string1 substringToIndex:3];

    NSLog(@"string2:%@",string2);


    //2.从第几个字符开始截取字符串

    NSString *string1 = @"This is a string";

    NSString *string2 = [string1 substringFromIndex:3];

    NSLog(@"string2:%@",string2);


    //3.从第几个字符开始截取几个字符串

    NSString *string1 = @"This is a string";

    NSString *string2 = [string1 substringWithRange:NSMakeRange(10,3)];

    NSLog(@"string2:%@",string2);


字符串的拼接操作:

    //1.连接字符串

    NSString * str1 = @"This is a string";

    NSString * str2 = @"Hello world";

    NSString * str3 = [str1 stringByAppendingString:str2];

    NSLog(@"str3:%@",str3);


    //2.连接字符串,使用格式符

    NSString * str1 = @"This is a string";

    NSString * str2 = @"Hello world";

    NSString * str3 = [str1 stringByAppendingFormat:@",%d,%@",123,str2];

    NSLog(@"str3:%@",str3);


接下来是插入,这里要注意,这里的是可变字符串:

    //1.可变字符串,插入一个新字符串,这里要注意下标不要越界

    NSMutableString * str = [[NSMutableString alloc]initWithCapacity:0];

    [str insertString:@"this is a mutableString" atIndex:0];

    [str insertString:@"1233" atIndex:1];

    NSLog(@"%@",str);


    //2.可变字符串,追加一个字符串

    NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];

    [str appendString:@"HELLO,WORLD"];

    NSLog(@"%@",str);


    //3.可变字符串,赋值

    NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];

    [str setString:@"123"];

    NSLog(@"%@",str);


    //4.可变字符串,删除一个范围

    NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];

    [str deleteCharactersInRange:NSMakeRange(1, 2)];

    NSLog(@"%@",str);


    //5.可变字符串,替换一个范围的字符串

    NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];

    [str replaceCharactersInRange:NSMakeRange(1, 2) withString:[NSString stringWithFormat:@"99999"]];

    NSLog(@"%@",str);


    //6.可变字符串,替换所有出现过的字符串,在制定长度里

    NSMutableString * str = [[NSMutableString alloc]initWithFormat:@"this is a string"];

    int result = [str replaceOccurrencesOfString:@"s" withString:@"123" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 13)];

    NSLog(@"替换了%d个字符串,新的字符串为:%@",result,str);



    //1.修改大小写的方法

    NSString *string1 = @"A String";

    NSString *string2 =@"StrIng,this is a string";

    //全部改大写

    NSLog(@"string1:%@",[string1uppercaseString]);

    //全部改小写

    NSLog(@"string2:%@",[string2lowercaseString]);

    //首字母大写,其余小写

    NSLog(@"string2:%@",[string2capitalizedString]);



字符串的方法很多。本文只是列举一些常用的。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值