您的位置:首页 > 移动开发 > Objective-C

ios学习笔记之Object-C—字符串

2014-01-26 16:29 330 查看
NSString*
string;
//
结果字符串
02
NSString*
string1, string2;
//已存在的字符串,需要将string1和string2连接起来
03
04
//方法1.
05
string
= [NSString initWithFormat:@
"%@,%@"
,
string1, string2 ];
06
07
//方法2.
08
string
= [string1 stringByAppendingString:string2];
09
10
//方法3
.
11
string
= [string stringByAppendingFormat:@
"%@,%@"
,string1,
string2];
经常用的是第二种方法。

iOS下的indexOf & subString

NSString *str = @"hello:world";

NSRange range = [str rangeOfString:@":"];

str = [str substringFromIndex:NSMaxRange(range)];

其中range这个东东有两个属性:length、location

length表示用来做range的字符串的长度,在此就是":"的长度 = 1;

location表示首个出现该匹配字符串的下标

在Object-c中,字符串的声明是:

NSString *aString;
aString并不真正包含一个字符串对象—它是指向内存中字符串对象的指针。(和C语言中,用指针指向字符串的声明类似);

字符串声明,以下三种方法:

NSString *a0 = [[NSString alloc]initWithFormat:@"kevin"]; //方法一

NSString *a1
= [[NSString alloc]initWithString:@"kevin"];
//方法二

NSString *a2 = @"kevin";
//方法三

NSString *a3
= [[NSString alloc]initWithFormat:@"kevin"];

区别1:方法一用Format进行字符串的声明,方法二用String方法声明,第三种方法和用String声明基本一致,但是不初始化内存空间,方法一和方法二中,a0和a1使用结束后,需要进行内存释放,但是a2不需要进行内存释放。

区别2:用Format初始化的字符串,需要初始化一段动态内存空间,如:0x6a42a40,而用String声明的字符串,初始化的是常量内存区,如:0x46a8,常量内存区的地址,只要值相同,占用的地址空间是一致的。所以a1和a2的地址一致,但是a0和a3的地址不一致。

将其它类型转化成字符串:

可以使用Format,以整型为例,如:

int i = 100;

NSString *b
= [[NSString alloc]initWithFormat:@"%d",i];
//如果是float型,可以用%f

NSLog(@"b
= %@",[b description]);

结果输出:b = 100

求字符串长度:

用length求字符串长度,如:

NSLog(@"a1
= %d",a1.length);

结果输出a1 = 5

注意这里和C语言的不同,C语言中,字符串的结束是以'\0'结束,而OC不是。

拼接、求子字符串:

拼接,使用stringByAppendingString,如:

NSString *a4 = @"2012";

NSString *c = [a0 stringByAppendingString:a4];

NSLog(@"c = %@",c);

结果输出:c = kevin2012

求子字符串,有三种方式:

1、substringFromIndex:x //从索引x开始到结束,包含索引x指向的值(索引的理解有点像C语言中数组的下标)

2、substringToIndex:x //从开始到索引x之前结束,不包含索引x指向的值

3、substringWithRange //定义一个区间,有开始位置和截取长度

如下:

NSString *d = [a1 substringFromIndex:1];

NSString *e = [a1 substringToIndex:3];

NSLog(@"d = %@,e = %@",d,e);

结果输出为:d = evin,e = kev

substringWithRange先定义区间,如下:

NSRange r = {2,3}; //从索引2开始,截取3个长度

NSString *f = [c substringWithRange:r];

NSLog(@"f = %@",f);

结果输出为:f = vin

字符串转化成其它类型:

int j = [a4 intValue]; //如果字符串由数字开头,转化为起始的数字,否则转化为0

NSLog(@"j = %d",j);

还可以转化为float,BOOL型,查文档得知,如果转化为BOOL型,Returns YES on encountering one of "Y", "y", "T", "t", or
a digit 1-9—the method ignores any trailing characters. Returns NO if the receiver doesn’t begin with a valid decimal text representation of a number.(由Y,y,T,t,1-9开始的字符串转化为YES,其余的为NO)

比较字符串是否相等:

a0 isEqual:(id) //a和一个对象进行判断,比较的是地址,如果发现传进来的都是字符串,直接比较字符串大小,若相等,就返回YES,如果不是字符串,就进行地址比较

a0 isEqualToString:b //a和字符串b进行比较,比较字符串大小

如下:

BOOL c1 = [@"12" isEqual:@"12"];

BOOL c2 = [@"12" isEqualToString:@"12"];

BOOL c3 = [a0 isEqualToString:a1];

NSLog(@"c1
= %d,c2 = %d,c3 = %d",c1,c2,c3);

结果输出为:c1 = 1,c2 = 1,c3 = 0;

比较字符串大小:

使用compare:升序返回-1,相等返回0,降序返回1

如下:

NSString *k1 = @"ABC";

NSString *k2 = @"ABc";

NSComparisonResult r1 = [k1 compare:k2];

NSLog(@"r1 = %d",r1);

结果输出为r1 = -1

转化字符串大小写:

lowercaseString: //转化成小写

uppercaseString: //转化成大写

如下:

NSString *k3 = [k1 lowercaseString];

NSString *k4 = [d1 uppercaseString];

NSLog(@"k3 = %@,k4 = %@",k3,k4);

结果输出为:k3 = abc,k4 = ABC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: