NSString+基本的字符串操作

来源:互联网 发布:知乎作死经历 编辑:程序博客网 时间:2024/06/05 06:48

NSString对象由unichar字符组成。unichar字符是符合Unicode标准的多字节字符。
要使用Objective-C语言创建一个常量字符串对象,需要在字符串开头放置一个@字符,表达式
@”string“
创建了一个常量字符串对象。特殊情况下,它属于NSConstantString类的常量字符串对象。NSConstantString类是字符串对象NSString类的子类。

>基本字符串操作

1、创建一个常量字符串

//创建字符串对象(像这样,会创建一个内容不可变的对象,这称为不可变对象。) NSString *string=@"test";

将string声明为不可变字符串对象,意味着它们所引用的字符串对象的字符不可以改变。然而,引用string是可以改变的,也就是说,可以重新为它指定其他的不可变字符串对象。这一点非常重要。

2、stringWithFormat

a.)stringWithFormat方法在使用上与NSLog相似。不同的是这个方法返回格式化的字符,而不是写入控制台。
b.)像stringWithFormat:这样的方法允许提供多个参数(stringWithFormat:需要的参数是格式化字符串和需要格式化的数据)。这些参数使用一系列逗号分隔提供给方法。

//1、输出一个字符串//结果:2017-07-14 16:35:44.240 To Do List[2444:131657] There will be a string named helloNSString *string;string=[NSString stringWithFormat:@"There will be a string named %s","hello"];NSLog(@"There will be a string named %s","hello");//2.1、输出多个字符串//结果:2017-07-14 17:30:55.276 To Do List[2527:144680] number1,number2NSString *string;NSString *string1=@"number1";NSString *string2=@"number2";string=[NSString stringWithFormat:@"%@,%@",string1,string2];NSLog(@"%@",string);//2.2、输出多个字符串//结果:2017-07-14 17:37:25.452 To Do List[2559:147011] number1,number2 NSString *string; string=[NSString stringWithFormat:@"%@,%@",@"number1",@"number2"]; NSLog(@"%@",string);//3、错误示例,将会有多个警告//结果:2017-07-14 17:34:18.391 To Do List[2543:145832] number1NSString *string;NSString *string1=@"number1";NSString *string2=@"number2";string=[NSString stringWithFormat:@"number1",@"number2"];NSLog(@"%@",string);

3、计算一个字符串的长度

length方法可以用来对字符串中的字符进行计数。它将返回NSUInteger类型的无符号整数值。

//结果是:2017-07-14 20:37:40.873 To Do List[518:5848] length of string:17 NSString *string=@"This is a string.";NSLog(@"length of string:%lu ",[string length]);

4、验证两个字符串是否相等

isEqualToString

//[@"字符" isEqualToString: string]或[string isEqualToString:@"字符"]//1、如果operation的符号是“+”,那么把两个数值相加 double result=0; if([operation isEqualToString:@"+"]){                 result=[self popOperand]+[self popOperand];               }//2、结果:2017-07-14 17:13:18.101 To Do List[2479:139530] EqualNSString *string1=@"number1";NSString *string2=@"number1";BOOL result=[string1 isEqualToString:string2];if(result){              NSLog(@"Equal"); }

5、验证一个字符串是否小于、等于或大于另一个字符串

compare(它的返回类型是:NSOrderedAscending(-1对于布尔值,总是错的),NSorderedSame,NSorderedDescending(分别等于整数-1,0,1)。)

////结果;2017-07-14 17:18:27.566 To Do List[2495:141038] equal NSString *string1=@"number1"; NSString *string2=@"number1"; BOOL result=[string1 compare:string2]; if(result==NSOrderedSame){              NSLog(@"equal"); }////结果是:2017-07-15 09:09:01.384 To Do List[607:10340] string1>string2NSComparisonResult compareResult;NSString *string1=@"This is a string";NSString *string2=@" in Xcode.";compareResult=[string1 compare:string2];if(compareResult==NSOrderedAscending){               NSLog(@"string1<string2");}else if (compareResult==NSOrderedSame){               NSLog(@"string1==string2");}else //必须是NSOrderedDescending{               NSLog(@"string1>string2");}

如果不想进行大小写敏感的比较,可以使用caseInsensitiveCompare:方法,而不是用compare:方法。如,使用caseInsensitiveCompare比较字符串对象@”THIS“和@”this“,会相等。

6、字符串与数值的转化

//字符串转化为数字,这里转化为16进制数//结果是:2017-07-14 17:48:42.775 To Do List[2665:151828] 10 NSString *string=@"16"; int number=[string intValue]; NSLog(@"%x",number);//数字转化为字符串//结果是:2017-07-14 17:56:59.482 To Do List[2741:155839] 13int number=13;NSString *string=[NSString stringWithFormat:@"%d",number];NSLog(@"%@",string);

7、插入字符

//注意插入的位置,插入的字符(包括空格)//结果是:2017-07-14 19:47:58.147 To Do List[2862:174940] This is Xcode.NSMutableString *string[NSMutableString stringWithFormat:@"This Xcode."];[string insertString:@"is " atIndex:5];NSLog(@"%@",string);

8、删除字符

NSMakeRange是一个结构体类型,包含两个参数(NSUInteger loc和NSUInteger len),位置和长度。表示字符串要传进来从哪里开始的位置和需要的长度。NSMakeRange(<#NSUInteger loc#>, <#NSUInteger len#>)。

//结果是:2017-07-14 19:54:43.149 To Do List[2879:176779] This is Xcode.NSMutableString *string=[NSMutableString stringWithFormat:@"This is the Xcode."];[string deleteCharactersInRange:NSMakeRange(8, 4)];NSLog(@"%@",string);

9、将一个字符串复制到另外一个字符串

//把string1的字符串复制到string上,结果是:2017-07-14 20:43:24.652 To Do List[554:8063] copy:This is a string. NSString *string;NSString *string1=@"This is a string.";string=[NSString stringWithString:string1];NSLog(@"copy:%@ ",string);

string=[NSString stringWithString:string1];

说明如何使用另一个字符串的内容生成一个新的字符串。NSString对象被赋值给string,在这里进行的实际上是字符串内容的复制,而不是对内存中同一个字符串的引用,即string1 和string指向两个不同的字符串对象,这与简单地执行以下赋值操作是不同的:(这仅仅是创建了内存中同一个对象的另一个引用)

string=string1;

10、将一个字符串复制到另一个字符串的末尾

使用stringByAppendingString:方法可以连接两个字符串。所以表达

string2=[string1 stringByAppendingString:string2];

创建了一个新的字符串对象,这个对象由string1 和string2的字符拼接而成,这项操作没有改变原字符串对象string1和string2(它们不能更改,因为都是不可变字符串对象)

//结果是:2017-07-14 20:51:16.851 To Do List[600:10836] Concatentation:This is a string in Xcode.NSString *string1=@"This is a string";NSString *string2=@" in Xcode.";string2=[string1 stringByAppendingString:string2];NSLog(@"Concatentation:%@ ",string2);

11、将字符串转换为大写

(不影响原始的字符串)

//结果是:2017-07-15 09:16:21.330 To Do List[626:12263] Uppercase conversion:THIS IS A STRINGNSString *string;NSString *string1=@"This is a string";string=[string1 uppercaseString];NSLog(@"Uppercase conversion:%s",[string UTF8String]);

12、将字符串转换为小写

(不影响原始的字符串)

//结果是:2017-07-15 09:20:25.294 To Do List[678:14263] lowercase conversion:this is a stringNSString *string;NSString *string1=@"THIS IS a STRING";string=[string1 lowercaseString];NSLog(@"lowercase conversion:%s",[string UTF8String]);

13、从字符串中提取前n个字符

substringToIndex:方法创建了一个子字符串,包括首字符到指定的索引数,但不包括这个字符。因为索引数是从零开始的,所以参数3表示从字符串中提取字符0、1、2,并返回结果字符串对象。对于所有采取索引数作为参数的字符串方法,如果提供的索引数对该字符串无效,就会获得Range or index out of bounds的出错消息。

//从字符串中提取前3个字符//结果:2017-07-15 10:56:11.864 To Do List[784:31186] First 3 chars of string1:Thi   NSString *string;NSString *string1=@"This is a string";string=[string1 substringToIndex:3];NSLog(@"First 3 chars of string1:%@",string);

14、提取从索引n开始直到结尾的子字符串

//提取从索引6开始直到结尾的子字符串结果是:017-07-15 10:59:05.013 To Do List[801:32171] Chars from index 6 of string1:s a string              NSString *string;NSString *string1=@"This is a string";string=[string1 substringFromIndex:6];NSLog(@"Chars from index 6 of string1:%@",string);

15、提取从索引n开始到索引m的子字符串

//15.1、从索引8开始到索引13的子字符串(6个字符8、9、10、11、12、13)//结果:2017-07-15 11:06:25.342 To Do List[818:34125] Chars from index 8 throght 13 of string1:a striNSString *string;NSString *string1=@"This is a string";string=[[string1 substringFromIndex:8] substringToIndex:6];NSLog(@"Chars from index 8 throght 13 of string1:%@",string);//15.2、更简单的方法(第8个字符开始,提取6个字符)NSString *string;NSString *string1=@"This is a string";string=[string1 substringWithRange:NSMakeRange(8, 6)];

16、从一个字符串中查找另一个字符串

// 结果是:2017-07-15 11:18:03.234 To Do List[850:37301] String is at index 10,length is 62017-07-15 11:18:03.235 To Do List[850:37301] String not foundNSRange subRange;NSString *string1=@"This is a string";//从string1中找字符串@“string”subRange=[string1 rangeOfString:@"string"];NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length); //从string1中找字符串@“stringA”,如果没有找到这个字符串,则返回范围的location成员被设置成为NSNotFound。              subRange=[string1 rangeOfString:@"stringA"];if(subRange.location==NSNotFound){                NSLog(@"String not found");}else{                NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);}

语句
subRange=[string1 rangeOfString:@”string”];

把方法返回的NSRange结构赋值给NSRange变量subRange。一定要注意,subRange不是对象变量,而是一个结构体变量(并且程序中的subRange声明不包括星号,这通常意味着不是在处理一个对象,不过id类型是个意外)。通过使用结构体成员操作符(.),可以检索其成员。所以,表达式subRange.location给出了该结构中成员location的值,subRange.length给出结构成员length的值,将这些值传递给NSLog函数显示。

>可变字符串的基本字符串操作

NSMutableString类可以用来创建可以更改字符的字符串对象。它是NSString类的子类,所以可以使用NSString类的所有方法。
任意一个可变或不可变字符串对象在程序执行过程期间,总是可以被设为完全不同的字符串对象的。如
string1=@“This is a string”;

string1=[string1 substringFromIndex:6];

在这个例子中,首先将string1设置为一个常量字符串对象。后来在程序中将其设为一个子字符串。在这个例子中,string可以声明为可变的字符串对象,也可以声明为不可变的字符串对象,一定要理解这一点。

1、从不可变字符串创建可变字符串

//结果是:2017-07-15 11:55:46.486 To Do List[900:44966] This is a stringNSMutableString *mstr;//将mstr声明为一个变量,用来存储在程序执行过程中值可能更改的字符串对象。NSString *string1=@"This is a string";mstr=[NSMutableString stringWithString:string1];NSLog(@"%@",mstr);

mstr=[NSMutableString stringWithString:string1];

将stringWithString:方法发送给NSMutableString类,返回一个可变的字符串对象。而将stringWithString:方法发送给NSString类时,则返回一个不可变的字符串对象。

2、插入字符

insertString: atIndex:方法将指定的字符串插入接收者,插入点从指定的索引值开始。

//2.1、在一个字符串某位置插入另一字符串//结果:2017-07-15 11:59:07.084 To Do List[917:46237] This is mutable a stringNSMutableString *mstr;NSString *string1=@"This is a string";mstr=[NSMutableString stringWithString:string1];[mstr insertString:@" mutable" atIndex:7];NSLog(@"%@",mstr);//2.2、插入末尾进行有效拼接//结果是:2017-07-15 12:03:01.003 To Do List[946:47766] This is a string which is mutablemstr=[NSMutableString stringWithString:string1];[mstr insertString:@" which is mutable" atIndex:[mstr length]];//2.3、直接使用appendString(在结尾插入)//结果如2.2mstr=[NSMutableString stringWithString:string1];[mstr appendString:@" which is mutable"];

3、删除字符

//3.1、根据范围删除子字符串//结果是:2017-07-15 14:01:49.056 To Do List[1004:52173] This is ringNSMutableString *mstr;NSString *string1=@"This is a string";mstr=[NSMutableString stringWithString:string1];[mstr deleteCharactersInRange:NSMakeRange(8, 4)];NSLog(@"%@",mstr);//3.2、查找然后将其删除//结果是:2017-07-15 14:08:47.414 To Do List[1022:54314] This is a stringNSRange substr;NSMutableString *mstr;NSString *string1=@"This is a mutable string";mstr=[NSMutableString stringWithString:string1];//查找想删除的字符串,如果有,将其删除。substr=[mstr rangeOfString:@" mutable"];if(substr.location!=NSNotFound){              [mstr deleteCharactersInRange:substr];              NSLog(@"%@",mstr);}

4、直接(重新)设置为可变的字符串

//重新设置,生效//结果是:2017-07-15 14:25:58.755 To Do List[1094:59533] This is a stringANSMutableString *mstr;NSString *string1=@"This is a string";mstr=[NSMutableString stringWithString:string1];[mstr setString:@"This is a stringA"];NSLog(@"%@",mstr);//直接设置,不生效//结果是:2017-07-15 14:30:08.803 To Do List[1111:60942] (null)NSMutableString *mstr;[mstr setString:@"This is a stringA"];NSLog(@"%@",mstr);

5、替换一些字符

//5.1、已知位置的替换//结果是:2017-07-15 14:34:07.833 To Do List[1161:62973] This is a mutable stringNSMutableString *mstr;NSString *string1=@"This is a string";mstr=[NSMutableString stringWithString:string1];//将8个字符"string",替换成字符"a mutable string"[mstr replaceCharactersInRange:NSMakeRange(8,8) withString:@"a mutable string"];NSLog(@"%@",mstr);//5.2、查找和替换//结果是:2017-07-15 14:44:30.617 To Do List[1178:65537] An example of a stringNSString *search,*replace;NSRange substr;NSMutableString *mstr;NSString *string1=@"This is a string";mstr=[NSMutableString stringWithString:string1];//要查找和替换的字符串              search=@"This is";replace=@"An example of";//查找               substr=[mstr rangeOfString:search];//替换if(substr.location!=NSNotFound){            [mstr replaceCharactersInRange:substr withString:replace];            NSLog(@"%@",mstr);}//5.3、查找和替换所有匹配项//结果是:2017-07-15 14:50:47.938 To Do List[1196:67244] ThiW iW a Wtring//要查找和替换的字符串search=@"s";replace=@"W";//查找               substr=[mstr rangeOfString:search];//循环,直到所有"s"都被替换成"W"while (substr.location!=NSNotFound){              [mstr replaceCharactersInRange:substr withString:replace];              substr=[mstr rangeOfString:search];}NSLog(@"%@",mstr);

如果替换的字符串为空(也就是不包含字符),那么将有效地删除所有的搜索到的字符串。没有空格隔开的相邻引号可指定为空的常量字符串,语句如下:
replace=@”“;
当然,如果只想删除字符串,则可以使用deleteCharactersInRange:方法。

上面的while循环替换为以下一行代码

//while循环替换[mstr replaceOccurrencesOfString:search withString:replace options:nil range:NSMakeRange(0, [mstr length])];///-(void)函数里面,option:nil,会有警告

附:字符串中的索引(索引数16,即字符串中的第17个字符)
这里写图片描述

常见的NSString方法
这里写图片描述
这里写图片描述
这里写图片描述

常见的NSMutableString 方法
这里写图片描述

参考链接:NSString(字符串)详细操作
NSString语法
《Objective-C程序设计》

原创粉丝点击