本帖最后由 wangshengjie 于 2015-3-14 19:39 编辑
不可变字符串在ObjC中字符串操作要比在C语言中简单的多,在下面的例子中你将看到字符串的初始化、大小写转化、后缀前缀判断、字符串比较、字符串截取、字符串转换等,通过下面的例子我们基本可以掌握常用的字符串操作(注意这些内容虽然基本,但却是十分常用的操作,需要牢记):- //
- // main.m
- // FoundationFramework
- //
- // Created by Kenshin Cui on 14-2-16.
- // Copyright (c) 2014年 Kenshin Cui. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- /**字符串操作*/
- void test1(){
- char *str1="C string";//这是C语言创建的字符串
- NSString *str2=@"OC string";//ObjC字符串需要加@,并且这种方式创建的对象不需要自己释放内存
- //下面的创建方法都应该释放内存
- NSString *str3=[[NSString alloc] init];
- str3=@"OC string";
- NSString *str4=[[NSString alloc] initWithString:@"Objective-C string"];
- NSString *str5=[[NSString alloc] initWithFormat:@"age is %i,name is %.2f",19,1.72f];
- NSString *str6=[[NSString alloc] initWithUTF8String:"C string"];//C语言的字符串转换为ObjC字符串
- //以上方法都有对应静态方法(一般以string开头),不需要管理内存(系统静态方法一般都是自动释放)
- NSString *str7=[NSString stringWithString:@"Objective-C string"];
- }
- void test2(){
- NSLog(@"\"Hello world!\" to upper is %@",[@"Hello world!" uppercaseString]);
- //结果:"Hello world!" to upper is HELLO WORLD!
- NSLog(@"\"Hello world!\" to lowwer is %@",[@"Hello world!" lowercaseString]);
- //结果:"Hello world!" to lowwer is hello world!
-
- //首字母大写,其他字母小写
- NSLog(@"\"Hello world!\" to capitalize is %@",[@"Hello world!" capitalizedString]);
- //结果:"Hello world!" to capitalize is Hello World!
-
- BOOL result= [@"abc" isEqualToString:@"aBc"];
- NSLog(@"%i",result);
- //结果:0
- NSComparisonResult result2= [@"abc" compare:@"aBc"];//如果是[@"abc" caseInsensitiveCompare:@"aBc"]则忽略大小写比较
- if(result2==NSOrderedAscending){
- NSLog(@"left<right.");
- }else if(result2==NSOrderedDescending){
- NSLog(@"left>right.");
- }else if(result2==NSOrderedSame){
- NSLog(@"left=right.");
- }
- //结果:left>right.
- }
- void test3(){
- NSLog(@"has prefix ab? %i",[@"abcdef" hasPrefix:@"ab"]);
- //结果:has prefix ab? 1
- NSLog(@"has suffix ab? %i",[@"abcdef" hasSuffix:@"ef"]);
- //结果:has suffix ab? 1
- NSRange range=[@"abcdefabcdef" rangeOfString:@"cde"];//注意如果遇到cde则不再往后面搜索,如果从后面搜索或其他搜索方式可以设置第二个options参数
- if(range.location==NSNotFound){
- NSLog(@"not found.");
- }else{
- NSLog(@"range is %@",NSStringFromRange(range));
- }
- //结果:range is {2, 3}
- }
- //字符串分割
- void test4(){
- NSLog(@"%@",[@"abcdef" substringFromIndex:3]);//从第三个索引开始(包括第三个索引对应的字符)截取到最后一位
- //结果:def
- NSLog(@"%@",[@"abcdef" substringToIndex:3]);////从0开始截取到第三个索引(不包括第三个索引对应的字符)
- //结果:abc
- NSLog(@"%@",[@"abcdef" substringWithRange:NSMakeRange(2, 3)]);
- //结果:cde
- NSString *str1=@"12.abcd.3a";
- NSArray *array1=[str1 componentsSeparatedByString:@"."];//字符串分割
- NSLog(@"%@",array1);
- /*结果:
- (
- 12,
- abcd,
- 3a
- )
- */
-
- }
- //其他操作
- void test5(){
- NSLog(@"%i",[@"12" intValue]);//类型转换
- //结果:12
- NSLog(@"%zi",[@"hello world,世界你好!" length]);//字符串长度注意不是字节数
- //结果:17
- NSLog(@"%c",[@"abc" characterAtIndex:0]);//取出制定位置的字符
- //结果:a
- const char *s=[@"abc" UTF8String];//转换为C语言字符串
- NSLog(@"%s",s);
- //结果:abc
- }
- int main(int argc, const char * argv[]) {
- test1();
- test2();
- test3();
- test4();
- test5();
- return 0;
- }
复制代码 注意:上面代码注释中提到的需要释放内存指的是在MRC下的情况,当然本质上在ARC下也需要释放,只是这部分代码编译器会自动创建。 |