Foundation框架—字符串

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

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、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值