OC--NSString字符串

来源:互联网 发布:程序员培训全日制吗 编辑:程序博客网 时间:2024/04/30 06:42

在OC中核心处理字符串的类有NSString和NSMutableString两个类。NSString是不可变字符串,NSMutableString是可变字符串。这里的可变指的是可以动态修改长度和内容。

这里对NSString常用到的属性和方法做一下梳理。

1、创建

//静态创建字符串常量

        NSString *string1 =@"啊啊啊啊啊";

        

        //alloc创建空字符串对象

        NSString *string2 = [[NSStringalloc]init];

        //给对象赋值

        string2 = @"啊啊啊啊啊";

OC是面向对象的开发语言,创建对象的语法是:类 *对象;   上面创建了一个不可变的字符串对象,并赋予了一个常量作为初始值,这就是一个常量字符串。

从对象的创建方式我们可以联想到C语言中的指针,那么这里创建的对象到底是什么呢?我们来看下内存地址就知道了,使用上面创建的对象,比较两个对象的内存地址。      

//静态创建字符串常量

        NSString *string1 =@"啊啊啊啊啊";

        

        //alloc创建空字符串对象

        NSString *string2 = [[NSStringalloc]init];

        NSLog(@"string2赋值前的内存地址:%p", string2);


        //给对象赋值

        string2 = @"啊啊啊啊啊";

        

        NSLog(@"string1的内存地址:%p", string1);

        NSLog(@"string2赋值后的内存地址:%p", string2);

打印结果:

2017-03-17 10:23:32.507 OCdemo[938:52474] string2赋值前的内存地址:0x7fff7535dd20

2017-03-17 10:23:32.508 OCdemo[938:52474] string1的内存地址:0x1000020d0

2017-03-17 10:23:32.508 OCdemo[938:52474] string2赋值后的内存地址:0x1000020d0

Program ended with exit code: 0

从上面的代码和打印结果可以看出,在创建string1和string2两个字符串对象后,两个对象的地址不同,当给string2一个和string1相同的值得时候,两个对象的地址相同。

其实,string1和string2存储的并不是字符串对象,它是指向内存中字符串对象的指针,它只是表示内存中的一个对象而不是保存。创建一个对象其实就是创建一个标识,也就是标识符。


2、属性&方法

字符串的长度属性

@property (readonly)NSUInteger length;

从声明来看,这是一个自读属性,因为NSString的长度是不能通过这个length属性来修改的。

NSString *aString =@"123456789";

        NSInteger len = aString.length;

        NSLog(@"aString的长度%ld", (long)len);

        

        NSLog(@"aString的长度%ld", [aString length]);

上面是创建一个字符串对象,并使用length属性打印字符串的长度,在OC中可以使用‘.语法’来直接使用属性,也可使用 ‘[]’方括号的方式。

打印结果:

2017-03-17 10:35:45.777 OCdemo[955:57384] aString的长度9

2017-03-17 10:35:45.777 OCdemo[955:57384] aString的长度9

Program ended with exit code: 0


类型转换属性,也可以成为类型转换方法。使用下面这些属性,可以将string的类型做转变。

@property (readonly)double doubleValue; //转换成double类型的数字

@property (readonly)float floatValue;  //转换为float类型数字

@property (readonly)int intValue;  //转换成int类型数字

@property (readonly)NSInteger integerValueNS_AVAILABLE(10_5, 2_0);  //转换成NSInteger类型数字

@property (readonly)longlong longLongValueNS_AVAILABLE(10_5, 2_0);  //转换成长整型数字

@property (readonly)BOOL boolValueNS_AVAILABLE(10_5, 2_0);   //转换成bool类型数据

从上面的介绍来看,string的转换都是转换为数字类型(bool也是0、1两个数字),


转换大小写属性,使用下面的属性可以转换字符串的大小写。

@property (readonly,copy)NSString *uppercaseString;  //转变成全部大写字符

@property (readonly,copy)NSString *lowercaseString;  //转变成全部小写字符

@property (readonly,copy)NSString *capitalizedString;  //转变成首字母大写


下面是一些常用方法:

创建一个空字符串的类方法

+ (instancetype)string;

创建一个字符串对象,并赋值string

+ (instancetype)stringWithString:(NSString *)string;

读取C语言字符串,并转换成UTF8文字

+ (nullableinstancetype)stringWithUTF8String:(constchar *)nullTerminatedCString;

字符串拼接

+ (instancetype)stringWithFormat:(NSString *)format, ...NS_FORMAT_FUNCTION(1,2);

本地化字符串

+ (instancetype)localizedStringWithFormat:(NSString *)format, ...NS_FORMAT_FUNCTION(1,2);


字符串拼接:

拼接两个字符串

- (NSString *)stringByAppendingString:(NSString *)aString;

可支持多个字符串拼接

- (NSString *)stringByAppendingFormat:(NSString *)format, ...NS_FORMAT_FUNCTION(1,2);

示例:

NSString *string1 =@"OC";

        NSString *string2 =@"是一门开发语言";

        NSString *str = [string1stringByAppendingString:string2];

        NSLog(@"%@", str);

        

        NSString *str1 = [string1stringByAppendingFormat:@"%@%@开发语言",@"是一门",@"面向对象的"];

        NSLog(@"%@", str1);

打印结果:

2017-03-17 13:09:43.084 OCdemo[1198:107163] OC是一门开发语言

2017-03-17 13:09:43.085 OCdemo[1198:107163] OC是一门面向对象的开发语言

Program ended with exit code: 0

从上面的代码可以看出:stringByAppendingString:后面只能跟一个字符串,所以只能实现两个字符串之间的拼接。而stringByAppendingFormat:后面可以有N个字符串。

字符串剪切的方法:

从某个下标的字符开始剪切字符串

- (NSString *)substringFromIndex:(NSUInteger)from;

剪切字符串到某个下标的字符

- (NSString *)substringToIndex:(NSUInteger)to;

在规定的范围剪切字符串

- (NSString *)substringWithRange:(NSRange)range;

代码示例:

NSString *bString =@"0123456789";

        NSString * str = [[NSStringalloc]init];

        //从下标为3的字符开始剪切字符串

        str = [bString substringFromIndex:3];

        NSLog(@"%@",str);

        

        //剪切字符串到下标为7的字符

        str = [bString substringToIndex:7];

        NSLog(@"%@",str);

        

        //剪切字符串,范围为从下标为的字符3开始,长度为7

        str = [bString substringWithRange:NSMakeRange(3, 7)];

        NSLog(@"%@",str);

结果:

2017-03-17 11:36:41.181 OCdemo[1109:84473] 3456789

2017-03-17 11:36:41.181 OCdemo[1109:84473] 0123456

2017-03-17 11:36:41.181 OCdemo[1109:84473] 3456789

Program ended with exit code: 0

字符串的下标和数组一样是从0开始的。


字符串的比较:

比较两个字符串是否相同

- (BOOL)isEqualToString:(NSString *)aString;

示例:

NSString *string1 =@"啊啊啊啊啊";

        NSString *string2 =@"啊啊啊啊啊";

        if ([string1isEqualToString:string2]) {

            NSLog(@"相同");

        }else{

            NSLog(@"不同");

        }

结果:

2017-03-17 11:48:46.890 OCdemo[1144:90511] 相同

Program ended with exit code: 0


字符串的比较还有‘==’和compare,‘==’是比较两个字符串指针的值,compare是比较两个字符串的大小,返回值为:NSOrderedAscending,NSorderedSame,NSorderedDescending(分别等于整数-1,0,1)。

相较于‘==’,isEqualToString比较的是类型和内容是否都相同。

还有一个isEqual的比较方法,这个是NSObject类的比较方法,从继承关系上来看,NSString是继承自NSObject类的。

isEqual,方法首先检查指针的等同性,相等直接返回YES,

然后是类的等同性,空或非同类对象直接返回NO,

最后调用对象的比较器进行比较。比较器的名称指示出参与比较的对象的类名称。若均相等,返回YES

isEqualToString,在比较对象都是字符串的前提下, 直接判断字符串内容,比较对象不是字符串,报错。


字符串的前缀和后缀

匹配字符串的前缀

- (BOOL)hasPrefix:(NSString *)str;

匹配字符串的后缀

- (BOOL)hasSuffix:(NSString *)str;

这两个方法,常用语去判断字符串的格式,比如:字符串是否以‘http//’开头。或者是否以‘.com’结尾。


字符串中搜索子串,并返回搜索结果

- (NSRange)rangeOfString:(NSString *)searchString;

这个方法是在一个字符串中搜索searchString

示例:

NSString *string2 =@"是一门开发语言";

        NSRange range = [string2rangeOfString:@"一门"];

NSLog(@"%lu", range.length);

        NSLog(@"%lu", range.location);


        if (range.location !=NSNotFound) {

            NSLog(@"搜索到了1");

        }

        //这个判定和上面等价

        if (range.length > 0) {

            NSLog(@"搜索到了2");

        }

打印结果:

2017-03-17 13:21:30.764 OCdemo[1268:113450] 2

2017-03-17 13:21:30.765 OCdemo[1268:113450] 1

2017-03-17 13:21:30.765 OCdemo[1268:113450] 搜索到了1

2017-03-17 13:21:30.765 OCdemo[1268:113450] 搜索到了2

Program ended with exit code: 0


字符串替换

- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement NS_AVAILABLE(10_5, 2_0);

示例:

NSString *string2 =@"是一门开发语言";

        

        NSRange range = [string2rangeOfString:@"一门"];

        

        NSString *string3 = [string2stringByReplacingCharactersInRange:rangewithString:@"一种"];

        

        NSLog(@"%@", string3);


结果:

2017-03-17 13:24:29.372 OCdemo[1280:115173] 是一种开发语言

Program ended with exit code: 0

上面的代码示例了一个搜索字符串,再替换的操作。



0 0
原创粉丝点击