Foundation框架—字符串

来源:互联网 发布:优化探究官网 编辑:程序博客网 时间:2024/04/29 21:46

一、字符串操作室程序开发中比较常见的,例如创建字符串、获取字符串长度和子字符串、字符串的比较、替换、拼接、分割等。

1. 创建字符串

    C语言中创建方式: 字符串是用字符数组来表示

 // C语言中创建    char *s = "A string";    // 改字符数组的每一个字符是一个ASCII字符,并以0值表示字符串的结尾。
    OC中创建方式
    // oc中创建    NSString *str1 = @"A String";    NSLog(@"st1:%@", str1);        NSString *str2 = [[NSString alloc] init];    str2 = @"A String";    NSLog(@"st2:%@", str2);    [str2 release];        NSString *str3 = [[NSString alloc] initWithString:@"A String"];  // 使用初始化字符串的方式,如使用带格式的    NSLog(@"st3:%@", str3);    [str3 release];        NSString *str4 = [[NSString alloc] initWithUTF8String:"A String"];    NSLog(@"st4:%@", str4);    [str4 release];        NSString *str5 = [[NSString alloc] initWithFormat:@"my age is %i and height is %.2f", 19, 1.55];    NSLog(@"st5:%@", str5);     // 要是希望能够自动释放,则可以使用NSString类的类方法 stringWithFormat:, 其使用方式与实例方法initWithFormat: 基本一样    NSString *str6 = [[NSString alloc] stringWithFormat:@"my age is %i and height is %.2f", 19, 1.55];    [str5 release];
    与C语言字符串不同,他的每个字符是16位Unicode字符。NSString是继承自NSOject,所以字符串可以用在所有需要对象的地方。
    不需要内存管理 用stringWith  代替  initWith
    NSString *str6 = [NSString stringWithString:@"A String"];    NSLog(@"st6:%@", str6);   

* OC中创建方式还有几个重要的方法:

void stringCreat_2() {    // 从文本读取文件    NSString *path = @"/Users/shumei/Desktop/test.txt";    // 异常机制    NSError *error;    // 错误时候就会给error 进行赋值    NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];    // 为什么下面的会出现线程错误    if (error != nil) {      // 返回的值不为空,也就是真;则表示失败        NSLog(@"读取文件失败 %@", error);    } else {        NSLog(@"读取文件成功 %@", str1);    }        // 访问本地文件    NSURL *url = [NSURL URLWithString:@"file:///Users/shumei/Desktop/test.txt"];    NSString *str2 = [NSString stringWithContentsOfURL:url encoding:(NSUTF8StringEncoding) error:nil];    NSLog(@"str2:%@", str2);        // 访问网络    NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"];    NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];    // NSLog(@"%@", str3);    }
2. 字符串的各种操作

  1). 字符串比较

    字符串的比较是最常见的操作。对于C语言字符串,C标准库中提供了strcmp方法。下面看看Cocos字符串的比较

     == 这个表示的是两个字符串是否为同一个对象;而不是比较两个字符串的内容是否相等。用isEqualToString 实例方法才是比较内容

void compare() {    // 使用== 比较    NSString *hello = @"Hello";    NSString *hello1 = [NSString stringWithFormat:@"%@", hello];    NSLog(@"hello: %@, %p", hello, hello);    NSLog(@"hello1: %@, %P", hello1, hello1);        NSLog(@"hello == hello1 ? %@", hello == hello1? @"YES" : @"NO");   // 输出结果是NO    NSLog(@"hello isEqualToString hello1 ? %@", [hello isEqualToString: hello1]? @"YES" : @"NO"); // 输出结果是YES        // 检测字符窜内容是否相同    BOOL result = [@"abc" isEqualToString:@"abc"];    BOOL result1 = [@"adc" isEqualToString:@"Abc"];        NSLog(@"result: %i  result1: %i", result, result1 );        NSComparisonResult result2 = [@"abc" compare:@"Abc"];    if (result2 == NSOrderedSame) {  // 一样大        NSLog(@"两边的字符串一样大");    }    if (result2 == NSOrderedAscending) { // 前者小于后者        NSLog(@"右边大于左边");    }    if (result2 == NSOrderedDescending) {   //  a = A + 32;  降序        NSLog(@"左边大于右边");    }   }
  2). 改变大小写
void caseTest() {    NSString *str = @"Hello World, hello world";    // 装换成大写    NSString *a = [str uppercaseString];    NSLog(@"大写:%@", a);        // 装换成大写    NSString *b = [str lowercaseString];    NSLog(@"大写:%@", b);        // 首字母变大写,其他字母变小写    NSLog(@"首字母变大写: %@", [@"hELLO" capitalizedString]);}
  3). 字符串搜索
void search() {    NSString *str =  @"123456.txt";    NSLog(@"是否以22开头:%i", [str hasPrefix:@"22"]);    NSLog(@"是否以txt开头:%i", [str hasSuffix:@"txt"]);        // NSRange是一个typedef的枚举类型  所以定义的时候不需要加*    NSRange range = [str rangeOfString:@"345"];    if (range.location == NSNotFound) {        NSLog(@"不能找到");    } else {        NSLog(@"找到的范围是: %@", NSStringFromRange(range));    }        // 从尾部开始搜索字符串    NSRange range1 = [str rangeOfString:@"345" options:NSBackwardsSearch];    NSLog(@"找到的range1范围是: %@", NSStringFromRange(range1));        // 指定范围进行搜索    NSRange range2 = {0, 5};    NSRange range3 = [str rangeOfString:@"34" options:NSBackwardsSearch range:range2];    NSLog(@"找到rang3的范围是: %@", NSStringFromRange(range3));    //NSLog(@"%i", range2);}
  4). 提取字符串(截取)
void subString() {    NSString *str = @"123456789";    // 截取789    // substringFromIndex  意思是从索引端开始截取到尾部 包括索引位置    NSString *str1 = [str substringFromIndex:6];    NSLog(@"%@", str1);        // substringToIndex  意思是从头部开始截取到索引端 不包括头部    NSString *str2 = [str substringToIndex:6];    NSLog(@"%@", str2);        // substringWithRange  意思是从头部开始截取到索引端 不包括头部    NSRange range = NSMakeRange(0, 3);   //    NSString *str3 = [str substringWithRange:range];    NSLog(@"%@", str3);        // 分割    NSString *str4 = @"1,2,3,4,5,6";    NSLog(@"str4: %@", str4);    NSString *str5 = @"1, 2, 3, 4, 5, 6";    NSLog(@"str5: %@", str5);    NSArray *array = [str4 componentsSeparatedByString:@","];    NSArray *array1 = [str5 componentsSeparatedByString:@","];    // NSArray *array1 = [str5 componentsSeparatedByString:@", "];  // 这样的就以array一样了    // NSArray *array1 = [str5 componentsSeparatedByString:@","];   // 这样的就 "1, 2, 3, 4, 5, 6"    NSLog(@"array: %@", array);    NSLog(@"array1: %@", array1);   // 打印出来的结果格式不一样为什么?    }
  5). 字符串与字符串数组的转换以及路径问题
void pathTest() {    NSMutableArray *components = [NSMutableArray array];  // NSMutableArray 是可变数组    [components addObject:@"Users"];    [components addObject:@"shumei"];    [components addObject:@"Desktop"];    // 将数组中的所有字符串拼接成一个路径    NSString *path = [NSString pathWithComponents:components];    NSLog(@"%@", path);        // 将路径分割成字符串    NSArray *cmps = [path pathComponents];    NSLog(@"%@", cmps);        // 判断是否为绝对路径(依据是最开始有没有/)    path = @"/user/shumei/desktop";    NSLog(@"%i", [path isAbsolutePath]);    NSLog(@"最后一个目录是 :%@", [path lastPathComponent]);    // 删除最后一个目录    NSLog(@"%@", [path stringByDeletingLastPathComponent]);    // 在最面拼接一个目录    NSLog(@"%@",  [path stringByAppendingPathComponent:@"shuzi"]);}
  6). 字符串拓展名处理
void extension() {    NSString *str = @"/user/shumei/text.txt";        NSLog(@"拓展名: %@", [str pathExtension]);    // 删除拓展名    NSLog(@"%@", [str stringByDeletingPathExtension]);    // 在拓展名后面添加文件,直接添加一个. 并不会做什么判断    NSLog(@"%@", [str stringByAppendingPathExtension:@"nihao"]);    }
  7). 其他
void other() {    NSString *str = @"1";    int a = [str intValue];        NSLog(@"a=%i", a);        // 求字符串长度 计算字数,不是计算字符数    NSUInteger len = [@"你好么" length];    NSLog(@"长度是:%zi", len);        // 返回C语言中的字符串    const char *s = [@"abc" UTF8String];    NSLog(@"%s", s);}
3. 可变字符串
void stringCreate_3() {    // 指定字符串长度    NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];        // 设置字符串内容    [str setString:@"123455"];    NSLog(@"字符串内容是: %@", str);        // 拼接字符串    [str appendString:@"678"];    NSLog(@"拼接后字符串内容是: %@", str);        // 这个也是拼接字符串    [str appendFormat:@"age is %i and len is %i", 22, 22];     NSLog(@"再次拼接后字符串内容是: %@", str);        // 替换字符串,将现有的字符串内容重置为另一个字符串内容    NSRange range = [str rangeOfString:@"len"];    [str replaceCharactersInRange:range withString:@"haha"];     NSLog(@"替换后字符串内容是: %@", str);        // 插入字符串    [str insertString:@"abcdef" atIndex:2];    NSLog(@"插入内容后字符串内容是: %@", str);        // 删除字符串 也可以删除指定范围的字符串    range = [str rangeOfString:@"abcd"];    [str deleteCharactersInRange:range];    NSLog(@"删除之后字符串内容是: %@", str);    NSRange range1 = NSMakeRange(0, 2);    [str deleteCharactersInRange:range1];    NSLog(@"再次删除之后字符串内容是: %@", str);}


1 0
原创粉丝点击