黑马程序员-OC加强学习日记-Foundation框架中的字符串和数组

------- ios培训、 android培训、java培训、期待与您交流! ----------

一.Foundation框架

1.概念:框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易。

为所有程序开发奠定基础的框架称为Foundation框架

2.使用:要想使用Foundation框架中的功能,包含它的主文件即可

#import <Foundation/Foundation.h>

二.NSString:

不可变字符串类   一个NSString对象就代表一个字符串

通过方法产生的字符串都是新的字符串,不会改变原来的字符串

(一)创建字符串

1.字面量方式  (常量字符串,存储在常量区)

NSString * str = @"kobe";

2.类方法创建

NSString * str = [NSString stringWithFormat:@"int = %d",@"hello",10];

3.对象方法创建

NSString * str = [[NSString alloc] initWithFormat:@"%@",@"heima"];

(二)字符串的获取 (关键单词 substring)

1.获取字符串长度

NSString * str = @"Messi";

long len = str.length;

2.获取子串

(1)从哪个索引开始截取字符直到结尾(包含索引上的字符)

NSString * str = @"www.cctv.com";

NSString * str1 = [str substingFormIndex:4];//  cctv.com

(2)从字符串开头截取到索引位置(不包含索引位置的字符)

NSString * str = @"www.cctv.com";

NSString * str1 = [str substingToIndex:3]; // www

(3)从哪个位置开始截取,截取长度是多长 range.location  range.length

NSString * str = @"www.cctv.com";

NSRange range = {4,4};

NSString * str1 = [str substingWithRange:range];// cctv

(4)获取字符串区间

NSString * str = @"www.cctv.com";

NSRange range = [str rangeOfString:@"com"];

// 判断有没有这个子串

if(range.length==0){

NSLog(@"没有这个子串")

}

NSLog(@"%@",NSStringFromRange(range));

(5)获取字符串索引上的字符

NSString * str = @"www.cctv.com";

unichar  c = [str characterAtIndex:7]; // v

(三) 字符串的判断与比较 (关键单词:isEqual  compare )

1.判断地址是否相同: str1==str2

2.判断内容是否相同:[str1 isEqualToString:str2];

3.字符串比较大小

compare方法比较的是内容,从前到后一个一个的比较,返回值有3个

NSOrderedAscending,NSOrderedSame,NSOrderedDescending,

str > str2  NSOrderedDescending

str < str2  NSOrderedAscending

str == str2 NSOrderedSame

代码演示:

 1  #import <Foundation/Foundation.h>
 2
 3  int main(int argc ,const char argv[]){
 4
 5         NSString * str1 = @"abc";
 6
 7         NSString * str2 = @"abc";
 8
 9         NSComparisonResult  rs = [str1 compare:str2];
10
11          if(rs==NSOrderedSame){
12
13              NSLog(@"str1== str2");
14
15          } else if(rs==NSOrderedAscending){
16
17              NSLog(@"str1<str2");
18
19          }else if(rs==NSOrderedDescending){
20
21              NSLog(@"str1>str2");
22
23          }
24
25       return 0;
26
27      }

// 比较的时候字符串不区分大小写

compare:(NSString *) options: NSCaseInsensitiveSearch

// 用于比较字符串中字符个数

compare:(NSString *) options: NSNumericSearch

(四)字符串转换 (关键单词:uppercase lowercase capitalized)

1.转大写 :[str uppercaseString];

2.转小写:[str lowercaseString];

3.单词首字母大写:[str capitalizedString];

4.基本数据类型转字符串

NSString intStr = [NSString stringWithFormat:@"%d",10];

5.字符串转基本数据类型

int a = intStr.intValue;

double b = intStr.doubleValue;

6.C字符串转OC字符串 (withCString)

NSString * str = [NSString stringWithCString:"haha" encoding:NSUTF8StringEncoding];

7.OC字符串转C字符串

char * c = [str cStringUsingEncoding:NSUTF8StringEncoding];

(五) 字符串替换 (关键单词:stringBy)

1.在原有字符串的末尾拼接一个字符串

[str stringByAppendingString:@"haha"];

2.字符替换

//  用 - 替换 *

[str stringByReplacingOccurrencesString:"*"withString:@"-"];

3.使用字符串替换原来字符串中的某个区间

NSString * str = @"www.cctv.com";

NSRange range = [str rangeOfString:@"cctv"];

// 用sina替换掉cctv所在的区间

[str stringByReplacingCharactersInRange:range withString:@"sina"];

4.删除原字符串中所有指定的字符

// 用空字符"" 替换 意味着删除

[str stringByReplacingOccurrencesString:"*"withString:@""];

5.去掉字符串两头的空格(重点掌握)

[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

(六)字符串与文件(关键单词:writeToFile)

1.把字符串写入文件

NSString * str = @"今天雾霾好大";

NSString * path = @"/Users/apple/Desktop/test.txt";

BOOL isSuccess = [str1 writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];

if(isSuccess){

NSLog(@"写入成功");

}

2.读取文件

NSString * str =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

(七) 字符串与URL

1.URL :统一资源定位符

格式:协议头://主机域名[IP,服务器]/路径

2.举例:http://ios.itcast.cn/ios/images/content_25.jpg

file:///Users/apple/Desktop/test.txt

由于file就是在本机中查找,所以没有主机名称

3.创建URL

(1)传入完整的字符串创建

NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"];

(2)通过文件路径创建(路径中不要出现中文)

NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/test.txt"];

4.把字符串写入URL

BOOL isSuccess = [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

5.读取URL

NSString * str =[NSString stringWithContentsOfFile:url encoding:NSUTF8StringEncoding error:nil];

三.NSMutableString (关键单词:append inset)

可变字符串,是NSString的子类。对原有字符串可以进行增改删操作

1.使用场景:字符串里的内容需要经常修改,那么就使用NSMutableString创建字符串

2.创建字符串

(1)创建了一个空的可变字符串,里面容量小。放入字符串存储空间以二进制递增,效率低

NSMutableString * str = [NSMutableString string];

(2)通过容量(capacity)创建,可变字符一创建就有多大的容量,超过容量再去扩展,效率高

NSMutableString * str = [NSMutableString stringWithCapacity:200];

3.往字符串中增加内容

[str appendString:@"haha"];

4.在某个位置插入字符

// 在索引为3的位置插入*

[str insetSring:@"*" atIndex:3];

5.赋值

// 可变字符串不能使用字面量的方式进行赋值。如果赋值可以使用点语法

str.string = @"abc"

 

代码演示:

 1 //  把20个 "lol" 拼接起来使用空格隔开
 2
 3  #import <Foundation/Foundation.h>
 4
 5   int main(int argc ,const char argv[]){
 6
 7       // 定义一个可变字符串
 8
 9       NSMutableString * str = [NSMutableString stringWithCapacity:100];
10
11       // 添加字符串
12
13       for(int i=0;i<20;i++){
14
15            [str appendString:@" lol"];
16
17         }
18
19       // 去掉字符串首位的空格
20
21       NSRange range = {0,1};
22
23         [str deleteCharactersInRange:range];
24
25    return 0;
26
27  }

四.数组

1.概念:有序的对象集合,可以存放任意的OC对象

2.特点: (1)同一数组中可以存放不同类型的对象

(2)同一个对象可以被存入数组多次

(3)不能存放基本数据类型,基本数据类型需要转换成其包装类型

(4)元素是有序的

(5)通常把一种类型的对象放入数组中,方便批量操作

五.NSArray

1.概念:不可变数组,一旦创建就不能增加,修改,删除其中的元素

 2.创建

(1)简洁的构造方法

NSArray * array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];

// nil 表示数组结束了。不要在数组中间加入nil

(2)通过对象方法

NSArray * array = [NSArray alloc] initWithObjects:dog,dog1,nil];

(3)字面量(最常用)

NSArray * array = @[iphone,ipad];

3.获取元素

(1)通过对象方法

NSArray * array = @[iphone,ipad];

// 访问第2个元素ipad

CZIpad * ipad = [array objectAtIndex:1];

 (2)快捷方式

iPad = array[1];

4.获取数组长度

long len = array.count;

5.判断数组中是否包含某个元素(contain)

BOOL isContain = [array containObject:dog];

6.数组遍历

NSArray * array [email protected][@"a",@"b",@"c",@"d"];

(1)普通遍历

for(int i=0;i<array.count;i++){

NSLog(@"%@",array[i]);

}

(2)快速遍历

for(NSString * str in array){

NSLog(@"%@",str);

}

(3)使用block遍历

//BOOL *stop 如果赋值为YES则停止循环

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop){

NSLog(@"下标:%lu 值:%@",idx,obj);

}];

*stop = YES;

7.数组元素排序

[array sortedArrayUsingComparator:^NSComparisonResult(CZDog * obj1,CZDog * obj2){

if(obj1.age==obj2.age){

return [obj1.name compare: obj2.name];

} else if(obj1.age>obj2.age){

return NSOrderedDescending; // 降序

} else {

return NSOrderedAscending; // 升序

}

}];

8.字符串与数组的转换

(1)使用字符串分割原来的字符串成一个数组

NSString * str = @"1 2 3 4 5 6";

NSArray * arr = [str componentsSeparatedString:@","];

(2)把数组组装成字符串

NSString * str 1= [arr componentsJoinedByString:@"," ];

9.数组与文件 (writeToFile)

(1)写入文件

NSArray * array [email protected][@"a",@"b",@"c",@"d"];

NSString * path = @"/Users/apple/Desktop/test.plist";

BOOL isSuccess = [array writeToFile:path atomically:YES];

if(isSuccess){

NSLog(@"写入成功");

}

(2)读取文件

array=[NSArray arrayWithContentsOfFile:path];

六.NSMutableArray

1.概念:可变数组,继承NSArray,支持插入,删除,修改的操作

2.创建

(1)创建一个空的可变数组

NSMutableArray * arrM = [NSMutableArray array];

(2)创建可容纳10个元素的可变数组

NSMutableArray * arrM = [NSMutableArray arrayWithCapacity:10];

3.添加元素

(1)不能通过字面量添加

(2)[arrM addObject:@"a"];

(3) 通过一个不可变数组去设置一个可变数组

arrM.array = @[@"1",@"2"];

4.在某个索引插入一个元素

// 在索引为1的位置插入元素"a"

[arrM insetObject:@"a" atIndex:1];

5.删除元素

//通过isEqual方法比较,只要与a相同就删除

[arrM removeObject:@"a"];

时间: 2024-12-15 06:52:07

黑马程序员-OC加强学习日记-Foundation框架中的字符串和数组的相关文章

黑马程序员---OC基础9【Foundation框架】【NSString介绍】【NSURL读写字符串】【NSString字符串比较】【NSString前后缀检查及搜索】【NSRange使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [Foundation框架] 1.Foundation框架介绍 1)Foundation框架概念 框架是由许多类.方法.函数.文档按照一定的逻辑组织起来的集合 以便使研发程序变得 更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation 框架 2)Foundation框架的作用 Foundation框架是Mac\iOS中其他框架的基础 Foundat

黑马程序员-OC加强学习日记-分类、协议、block类型

------- ios培训. android培训.java培训.期待与您交流! ---------- 一.分类  Gategroy 1.创建一个分类 @interface  类名 (分类名) @end @implementation 类名 (分类名) @end 2.特点:(1)扩展已有类的功能 (2)分类中可以访问原有类的成员变量(定义在头文件中的成员变量) 3.语法步骤:(1)创建一个分类 (2)在分类中增加新方法的声明和实现 4.注意点:(1)分类不可以为原有类增加定义成员变量, @prop

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员—oc语言学习心得—block

黑马程序员—oc语言学习心得—block -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,程序一般用typedef定义一个block类型 然后调用 typedef void(^xxx)(); 可使用助记符 inlineblock 2,Block内部可以访问外部变量:默认情况下,Block内部不能修改外部的局部变量 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改. 3,block的作用: 利用block封

黑马程序员——oc语言学习心得----NSFileManager

黑马程序员——oc语言学习心得----NSFileManager -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 自己总结了下NSFileManager的简单几个用法 : // 首先要创建文件管理器 NSFileManager *fm=[NSFileManager defaultManager]; 1,判断文件是否存在 fileExistsAtPath: 2,判断文件是否是目录 fileExistsAtPath: 3, 判断文件是否可读

黑马程序员------C 语言学习笔记---C语言中的宏定义

1.5    C语言程序的运行过程 01 源程序:由高级语言或汇编语言编写,C语言源程序的扩展名为.C 02 目标程序:源程序经“编译程序”翻译所得的二进制代码为目标程序,其扩展名为.obj 03 可执行程序:目标程序与库函数连接,形成可执行程序,.out #include <stdio.h> int main() { #define PI 3.14 double r,len,area; printf("请输入半径:\n"); // 提示用户输入半径 scanf("

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.