黑马程序员-OC学习笔记之NSString与NSMutableString

---------------------- IOS开发Android培训、期待与您交流!
----------------------

一、NSString与NSMutableString

相信大家对NSString类都不陌生,它是OC中提供的字符串类,它的对象中的字符串都是不可变的,而它的子类NSMutableString类的对象中的字符串就是可变的。什么是可变与不可变呢?二者的区别就是在已经创建的一个字符串对象中,在程序中能不能更改字符串,比如拼接新的字符串,可变的可以在原字符串中更改,不可变的不能更改。

二、关于字符串的创建

1> OC字符串的创建小桥前面都已经用过,最简单就是下面这个:

NSString *str1 = @"葬花 桥";

2> 创建的一个字符串中要带有格式化的拼接字符串,可以这样:

NSString *str2 = [[NSString alloc] initWithFormat:@"我的名字叫:%@--%d岁了", @"葬花 桥", 120];

3> C字符串与OC字符串的相互转换

 // C字符串转换成OC字符串
    NSString *str3 = [[NSString alloc] initWithUTF8String: "葬花 桥"];

    // OC字符串转换成C字符串
    const char *s = [str3 UTF8String]; 

4> 以文件内容初始化字符串:

// 以文件内容来初始化字符串
NSString *str4 = [[NSString alloc] initWithContentsOfFile:@"/Users/souhanaqiao/Desktop/soubanaqiao.txt" encoding:NSUTF8StringEncoding error:nil]; 

这一句后,str4中的字符串就是文件soubanaqiao.txt中的内容了,可以看下载图:

小桥觉得这就是OC中读取文件,上面的代码只能读取本地的文件内容,还有万能的,既能读本地的也能读网络上的

 NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/souhanaqiao/Desktop/soubanaqiao.txt"];
 NSString *str5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 

其中NSURL是OC中的资源地址类,它的对象表示的是一个资源的路径,不管是本地的还是网络的,但是本地与网络的协议不同,本地是file,网络的有http,有ftp等等。MJ老师说可以把百度网页的文本内容读取进来,小桥这里试试:

NSURL *baidu = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
NSString *str6 = [[NSString alloc] initWithContentsOfURL:baidu encoding:NSUTF8StringEncoding error:nil];

以上的字符串创建方法大部分都有类方法,如:

// [NSString stringWithFormat:<#(NSString *), ...#>]

// [NSString stringWithUTF8String:<#(const char *)#>]

// [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>]

三、写入字符串到文件

NSString有个对象方法 writeToFile是把字符串写入到文件中,

NSString *str1 = @"桥";
[str1 writeToFile:@"/Users/souhanaqiao/Desktop/wang.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; 

这个方法会在路径中创建一个wang.txt文件并把str1的字符串写入到文件中,当然还可以用url,

// 将str1字符串写入到url中
    NSURL *url = [NSURL URLWithString:@"file:///Users/souhanaqiao/Desktop/wang2.txt"];
    [str1 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]; 

三、NSMutableString

NSMutableString类是NSString的子类,所以它的字符串对象的创建方法相同,当然它也有自己独有的方法,这些方法与它的可变字符串相关。下面小桥创建一个要可变的字符串:

NSMutableString *str1 = [[NSMutableString alloc] initWithFormat:@"小桥正在学习OC"];?

这里的可变字符串不能用 @"" 来直接创建,因为 @""创建的字符串对象是不可变的,也即是NSString类型的。既然是可变字符串,那么str1中可以增加字符串,如:

[str1 appendString:@"今天天气不好"];

调用append方法在str1字符串的后面加上了一个字符串,那么现在str1中的字符串就为 小桥正在学习OC今天天气不好

可以拼接一个,当然也可以删除str1中的某个字符串,如:

NSRange range = [str1 rangeOfString:@"正在学习"]; // 找到 正在学习 的范围
[str1 deleteCharactersInRange:range]; // 删除正在学习 

这里的NSRange是一个结构体,里面有两个成员,一个是下标一个是长度。

---------------------- IOS开发Android培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com

黑马程序员-OC学习笔记之NSString与NSMutableString

时间: 2024-10-12 21:06:47

黑马程序员-OC学习笔记之NSString与NSMutableString的相关文章

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

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

黑马程序员——OC学习笔记—— Copy

黑马程序员——OC学习笔记—— Copy ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- copy 即对象拷贝 要使用对象数据而不希望修改对象时,可以使用copy copy叫做浅拷贝  mutablecopy深拷贝 copy需要遵守NSCopying协议,实现CopywithZone方法 MutableCopy也一样要遵守相应协议 注意: OC中copy复制的对象都是不可变的  mutablecopy复制的是可变副本 浅拷贝:只拷贝地址,不

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O

黑马程序员-OC学习笔记之autorelease与自动释放池

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.autorelease autorelease与release相似,是OC中的一个对象方法.这两个方法都能把对象的引用计数器减1,但是release是一个精确的减1,对对象的操作只能在release之前进行,如果是在之后,就会出现野指针错误:而autorelease是一个不精确的引用计数器减1,当给对象发送autorelease消息时,对象就会被放到自动

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

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

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

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

黑马程序员_OC学习笔记之Foundation框架集合类

OC--集合类 1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等 2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加* 3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变 4.NSArray数组和子类NSMutableArray的基本操作: 1>使用NS

黑马程序员——Foundation学习笔记(NSSet和NSMutableSet)

==========android培训.ios培训.java培训.期待与您交流========== 一.NSSet: NSSet NSSet里面存储的元素没有顺序,NSArray中的元素有顺序. NSSet *s = [NSSet set]; // 创建一个空的Set,永远是空,不可变. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; NSString *str = [s2 anyObject]; //

黑马程序员-C学习笔记之scanf

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.scanf函数介绍 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include<stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量. 函数原型为:int scanf(const char*format,...); 二.scanf用