objective-c 中核心处理字符串的类是NSString 与 NSMutableString,这两个类最大的区别就是NSString创建赋值以后该字符串的内容与长度不能再动态的更改,除非重新给这个字符串赋值。而NSMutableString 创建赋值以后可以动态在该字符串上更改内容与长度。
//一、NSString
/*------------------------------创建字符串的方法--------------------------------*/
//1、创建字符串。
NSString *string =@"This is a String";
NSString 与 char*最大的区别就是NSString是一个objective对象,而char*是一个字节数组。@”字符串”这个符号为objective-c NSString字符串常量的标准用法,char*创建的时候无需添加@
//字符串格式化合并分别包括 //NSString*类型 int类型 char*类型
NSString *str1 = [NSString stringWithFormat:@"我的名字: %@ 我的年龄:%d我的邮箱:%s",@"岩松",25,"bokan@sohu.com"];
//字符串赋值参数中只可以写一个字符串和第一种很像
NSString *str2 = [NSString stringWithString:@"我的字符串"];
//字符串转换为utf-8格式参数为char*类型
NSString *str3 = [NSString stringWithUTF8String:"字符串转换utf-8格式"];
//字符串合并
int i =100;
char *c ="xuanyusong";
NSString *temp =@"我是临时字符串";
//在字符串temp的基础继续添加 int i 与 char* c组成一个新的字符串
NSString *str4 = [temp stringByAppendingFormat:@"整型:%d字符型:%s",i,c];
//在字符串temp的基础继续添加temp并组成一个新的字符串
NSString *str5 = [temp stringByAppendingString:temp];
NSLog(@"str1 = %@",str1);
NSLog(@"str2 = %@",str2);
NSLog(@"str3 = %@",str3);
NSLog(@"str4 = %@",str4);
NSLog(@"str5 = %@",str5);
//2、创建空字符串,给予赋值。
NSString *string = [[NSString alloc]init];
string = @"This is a String!";
[string release];
NSLog(@"string:%@", string);
NSString * string1 = [[NSString alloc]init];
NSLog(@"0x%.8x", string1);
string = @"This is a String!";
NSLog(@"0x%.8x", string1);
[string1 release];
NSLog(@"string1:%@", string1);
//经典的字符串赋值
NSString *string =@"[PDF:\"http://218.75.38.115:8080/gdsy\fawenguanli.nsf/0/540969EE9C8E9A8E4825796C002100BE/$file/%E6%B5%8B%\"E8%AF%95.pdf\"]测试.pdf[/PDF]";
NSLog(@"string = %@",string);
//遍历字符串中的每一个字符
for (int i =0; i < [string length]; i++)
{
char c = [string characterAtIndex:i];
NSLog(@"字符串第 %d 位%c",i,c);
}
//3、在以上方法中,提升速度:initWithString方法
NSString *string = [[NSString alloc]initWithString:@"This is a String!"];
NSLog(@"string:%@",string);
[string release];
//4、用标准c创建字符串:initWithCString方法 char *Cstring ="This is a String!";
NSString *string = [[NSString alloc]initWithCString:Cstring];
NSLog(@"string:%@", string);
[string release];
//5、创建格式化字符串:占位符(由一个%加一个字符组成) int i =1;
int j =2;
NSString *string = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%d.This is %i string!",i,j]];
NSLog(@"string:%@",string);
[string release];
//6、NSString中的length方法返回字符串中的字符的个数,如:
NSString *string = [[NSString alloc] initWithString:@"OneTwoFour"];
NSLog(@"string :%d",[@"OneTwoFour"length]);//返回10
//7、创建临时字符串
NSString *string = [NSString stringWithCString:"This is a temporary string"];
NSLog(@"string:%@",string);
/*--------------------从文件读取字符串:initWithContentsOfFile方法--------------------*/
NSString *path = @"string.text";NSString *string = [[NSString alloc] initWithContentsOfFile:path];
NSLog(@"string:%@",string);
[string release];
/*----------------------写字符串到文件:writeToFile方法------------------------------*/
NSString *string = [[NSString alloc] initWithString:@"This is a String!"];
NSLog(@"string:%@",string);
NSString *path = @"string.text";
[string writeToFile: path atomically: YES];
[string release];
/*--------------------------------比较两个字符串----------------------------------*/
//用C比较:strcmp函数char string1[] = "string!";
char string2[] = "string!";
if(strcmp(string1, string2) = = 0)
{
NSLog(@"1");
}
//isEqualToString方法
比较字符串是否完全相等,大小写不一样也无法完全匹配
NSString *string01 = @"This is a String!";
NSString *string02 = @"This is a String!";
BOOL result = [string01 isEqualToString:string02];
NSLog(@"result:%d",result);
//compare方法(comparer返回的三种值) 逐个字符进行比较:
//compare:options;带选项的比较字符串
NSString *string01 = @"This is a String!";
NSString *string02 = @"This is a String!";
BOOL result = [string01 compare:string02] = = NSOrderedSame;
NSLog(@"result:%d",result);
//NSOrderedSame判断两者内容是否相同
NSString *string01 = @"This is a String!";
NSString *string02 = @"this is a String!";
BOOL result = [string01 compare:string02] = = NSOrderedAscending;
NSLog(@"result:%d",result);
//NSOrderedAscending判断两对象值的大小(按字母顺序进行比较,string02大于string01为真)
NSString *string01 = @"this is a String!";
NSString *string02 = @"This is a String!";
BOOL result = [string01 compare:string02] == NSOrderedDescending;
NSLog(@"result:%d",result);
//NSOrderedDescending判断两对象值的大小(按字母顺序进行比较,string02小于string01为真)
//不考虑大小写比较字符串1
NSString *string01 = @"this is a String!";
NSString *string02 = @"This is a String!";
BOOL result = [string01 caseInsensitiveCompare:string02] == NSOrderedSame;
NSLog(@"result:%d",result);
//NSOrderedDescending判断两对象值的大小(按字母顺序进行比较,string02小于string01为真)
//不考虑大小写比较字符串2
NSString *string01 = @"this is a String!";
NSString *string02 = @"This is a String!";
BOOL result = [string01 compare:string02options:NSCaseInsensitiveSearch | NSNumericSearch] = = NSOrderedSame;
NSLog(@"result:%d",result);
//NSCaseInsensitiveSearch:不区分大小写比较 NSLiteralSearch:进行完全比较,区分大小写 NSNumericSearch:比较字符串的字符个数,而不是字符值。
/*----------------------------------改变字符串的大小写-----------------------------*/
NSString *string2 = @"string";
//设置字符串首字母大写
NSLog(@"string2首字母大写:%@",[string2 capitalizedString]);
//设置字符串全部内容为大写
NSLog(@"string1大写:%@",[string2 uppercaseString]);
//设置字符全部内容为小写
NSLog(@"string2小写:%@",[string2 lowercaseString]);
/*-----------------------------在串中搜索子串-------------------------------------*/
NSString *string1 = @"This is a string";
NSString *string2 = @"string";
NSRange range = [string1 rangeOfString:string2];
int location = range.location;
int length = range.length;
NSString *string = [[NSString alloc] initWithString:[NSString stringWithFormat:@"Location:%i, length:%i",location, length]];
NSLog(@"string:%@",string);
[string release];
/*-----------------------------------抽取子串 ---------------------------------*/
//-substringToIndex: 从字符串的开头一直截取到指定的位置,但不包括该位置的字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringToIndex:3];
NSLog(@"string2:%@",string2);
//-substringFromIndex: 以指定位置开始(包括指定位置的字符),并包括之后的全部字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringFromIndex:3];
NSLog(@"string2:%@",string2);
//-substringWithRange:
//按照所给出的位置,长度,任意地从字符串中截取子串
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringWithRange:NSMakeRange(0, 4)];
NSLog(@"string2:%@",string2);
NSRange:用来表示相关事物的范围,定义于 NSRange.h。通常是字符串里的字符范围或者数组里的元素范围。
typedef struct _NSRange
{
NSUInteger location;
NSUInteger length;
}
创建方法:
直接给字段赋值:
NSRange r;
r.location =4;
r.length = 2;
或者,应用C语言的聚合结构赋值机制:
NSRange range = (4,2);
或者,适用Cocoa提供的函数NSMakeRange();
NSRange range = NSMakeRange(4,2);
使用NSMakeRange函数的好处是你可以在任何能够使用函数的地方使用它。
NSRange r;
r.location =4;
r.length = 2;
NSString *sub3 = [string substringWithRange:r];
NSLog(@"%@",sub3);
//扩展路径NSString *Path = @"~/NSData.txt";
NSString *absolutePath = [Path stringByExpandingTildeInPath];
NSLog(@"absolutePath:%@",absolutePath);
NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]);
//文件扩展名NSString *Path = @"~/NSData.txt";
NSLog(@"Extension:%@",[Path pathExtension]);
/**********************************************NSMutableString****************************************************/
NSString是不可变的,一旦NSString被创建,就不能改变它。可以用它来生成新的字符串,查找字符串或将它其他字符串比较,但不能以删除字符或者添加字符的方式来改变它。
如果想改变字符串,请使用NSString的子类NSMutableString。
NSString类似Java中的String,NSMutableString类似与Java中的StringBuffer。
/*-----------------------------------给字符串分配容量-----------------------------------*/
示例代码:
NSMutableString *string;//声明变量
string=[NSMutableString stringWithCapacity:40];//初始化变量大小
这个capacity只是给NSMutableString的一个建议,字符串的大小并不限制与所提供的capacity,这个capacity只是个最优值。
[string appendString:@"hello,world"];//变量的初始值
[string appendFormat:@",%d",100];//字符串追加
NSLog(@"%@",string);//输出
NSRange range;//定义范围变量
range=[string rangeOfString:@"world"];//查找"world"在string中的位置
[string deleteCharactersInRange:range];//删除range范围字符串
NSLog(@"%@",string);
/*-----------------------------在已有字符串后面添加字符-------------------------------*/
//appendString: and appendFormat: NSMutableString *string1 = [[NSMutableString alloc] initWithString:@"This is a NSMutableString"];
[string1 appendString:@", I will be adding some character"];
[string1 appendFormat:[NSString stringWithFormat:@", I will be adding some character"]];
NSLog(@"string1 = %@",string1);
//两个字符串连接
NSString *string1 =@"MAC OS Pro";
NSString *string2 =@"Leopard";
NSString *string3 = [string1 stringByAppendingString:string2];
NSLog(string3,nil);
NSString *string4 = [string1 stringByAppendingFormat:@"%d",10];
NSLog(string4,nil);
NSMutableString *myString = [NSMutableStringstringWithString:@"Hello World."];
[myString appendFormat:@"The results are %@ now.",@"in"];
NSLog(@"%@", myString);
/*--------------在已有字符串中按照所给出范围和长度删除字符---------------------*/
//删除字符串
NSMutableString *string7 = [[NSMutableString alloc]initWithString:@"This is a NSMutableString"];
[string7 deleteCharactersInRange:NSMakeRange(0,2)];
NSLog(string7,nil);
/*----------------在已有字符串后面在所指定的位置中插入给出的字符串-------------*/
//插入字符串
NSMutableString *string6 = [NSMutableString stringWithFormat:@"Mac X"];
[string6 insertString:@"OS"atIndex:4];
NSLog(string6,nil);
/*--------将已有的字符串换成其它的字符串------*/
//-setString:
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@"This is a NSMutableString"];
[String1 setString:@"Hello Word!"];
NSLog(@"String1:%@",String1);
/*--------按照所给出的范围,和字符串替换的原有的字符 ------*/
NSString *str0 = @"my name is lijun";
NSString *temp =@"is";
NSRange rang = [str0 rangeOfString:temp];
NSLog(@"搜索的字符串在str0中起始点的index为 %d",rang.location);
NSLog(@"搜索的字符串在str0中结束点的index为 %d",rang.location + rang.length);
//将搜索中的字符串替换成为一个新的字符串
NSString *str = [str0 stringByReplacingCharactersInRange:rangwithString:@"居前"];
NSLog(@"替换后字符串为%@",str);
//将字符串中" "全部替换成 *
str = [str0 stringByReplacingOccurrencesOfString:@" " withString:@"&"];
NSLog(@"替换后字符串为%@",str);
/*----------------------------------- 搜索与替换字符串 --------------------------------*/
NSMutableString *string = [[NSMutableString alloc]initWithString:@"This is a NSMutableString"];
NSRange searchRange = [string rangeOfString:@"This"];
if (searchRange.location !=NSNotFound)
{
NSLog(@"location = %d, length = %d",searchRange.location,searchRange.length);
}
/*-----------------------------将字符串转换为数组---------------------------------------*/
NSString *string =@"One,Two,Three,Four,Five,Five,Six,Seven";
NSArray *wordArray = [string componentsSeparatedByString:@","];
NSLog(@"%@", wordArray);
/*-----------------------判断字符串内是否还包含别的字符串(前缀,后缀)--------------------*/
//01:检查字符串是否以另一个字符串开头- (BOOL) hasPrefix: (NSString *) string;
NSString *string0 = @"NSStringInformation.txt";
[string0 hasPrefix:@"NSString"] ==1 ? NSLog(@"YES") : NSLog(@"NO");
[string0 hasSuffix:@".txt"] ==1 ? NSLog(@"YES") : NSLog(@"NO");
NSString *s1 = @"hello World";
NSString *s2 =@"hello Mom";
NSLog(@"%@ %@ %@", s1,[s1 isEqualToString:s2]?@"equals" :@"differs from",s2);
NSLog(@"%@ %@ %@", s1,[s1 hasPrefix:@"Hello"]?@"starts with" :@"does not start with",@"Hello");
NSLog(@"%@ %@ %@", s1,[s1 hasSuffix:@"Hello"]?@"ends with" :@"does not end with",@"Hello");
//02:查找字符串某处是否包含其它字符串 - (NSRange) rangeOfString: (NSString *) string,这一点前面在串中搜索子串用到过;
NSRange range;
range = [string5rangeOfString:@"Mac OS"];
if (range.location !=NSNotFound)
{
//得到字符串的位置和长度
NSLog(@"%d %d",range.length,range.location);
}
else
{
NSLog(@"没有发现");
}
/*---------------------------------从字符串提取数字 -----------------------------------*/
使用一个值方法可将字符串转换成数字
NSString *s3 =@"3.141592";
NSLog(@"%d", [s3 intValue]);
NSLog(@"%d", [s3 boolValue]);
NSLog(@"%f", [s3 floatValue]);
NSLog(@"%f", [s3 doubleValue]);