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
- Foundation框架—字符串
- Foundation框架—字符串
- Foundation框架—字符串
- Foundation框架—字符串
- Foundation框架—字符串
- IOS学习之Foundation框架—字符串
- Foundation框架—字符串NSString 和 NSMutableString
- Foundation框架-字符串
- Foundation框架之字符串对象
- 黑马程序员——Foundation框架—字符串方法
- 黑马程序员——Foundation框架:字符串之集合类
- Foundation框架—集合
- Foundation框架—集合
- Foundation框架—集合
- Foundation框架—集合
- Foundation——字符串
- Foundation——字符串
- Foundation——字符串
- 台大机器学习基石课程之机器学习基本原理和概念
- C++: 继承与派生
- 内存使用技巧及内存池实现(一)
- 存储过程循环添加数据到数据库中
- Linux学习笔记-----RPM包管理----源码包安装
- Foundation框架—字符串
- 内存使用技巧及内存池实现(二)
- 删除一个集合中的元素
- LeetCode解题报告--3Sum Closest
- Memcached 及 Redis 架构分析和比较
- 线性筛素数
- Java I/O系统文件简单操作
- NYOJ 77 开灯问题
- MySQL覆盖索引