一、创建字符串的方法

void stringCreate(){
//方法1
NSString *str1 = @"A String!";
//方法2
NSString *str2 = [[[NSString alloc] init] autorelease];
str2 = @"A String!";
[str2 release];
//方法3
NSString *str3 = [[NSString alloc] initWithString:@"A String!"];
[str3 release];
//释放内存后 str3指向新内存
str3 = [NSString stringWithString:@"A String!"];
//方法4
NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"];
[str4 release];
//方法5
NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", 19, 1.55f];
[str5 release];
//str5指向新内存
str5 = [NSString stringWithFormat:@"My age is %i and height is %.2", 19, 1.55f];
}

这里需要注意的是

1、在指向新内存的时候要确保原来指向的内存释放。
2、使用静态方法创建字符串对象后系统会自动释放内存,不要再次释放,否则会发生野指针错误。

二、读取文件内容到字符串

    //从文件读取字符串,并使用UTF-8编码
NSError *error;
NSString *path = @"/user/apple/Desktop/test.txt";
NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if(error){
NSLog(@"读取文件失败");
}else{
NSLog(@"读取文件成功");
}

这里需要注意的是传入error的时候需要传入error的地址。

如上图所示,假如我们现在定义了一个变量a   (int a = 123) 在内存中的结构如图,我们要改变变量a的值,就是通过找到该地址然后给该地址所指向的内存赋值。基于这个我们要获取错误信息,就需要传递error的地址。

三、读取URL内容到字符串

    NSString *str2 = [NSString stringWithContentsOfURL:@"file:///user/apple/Desktop/test.txt" encoding:NSUTF8StringEncoding error:&error];

    NSString *str3 = [NSString stringWithContentsOfURL:@"http://www.baidu.com" encoding:NSUTF8StringEncoding error:&error];

四、字符串导出

#pragma mark 字符串的导出
void stringExport(){
NSError *error;
NSString *str = @"dfdfddfdfdfd";
NSString *path = @"/user/apple/Desktop/test.txt";
//YES代表要进行原子性操作,也就是会创建一个中间临时文件
//如果文件不存在会自动创建
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error]; if (error) {
NSLog(@"写入失败:%@", [error localizedDescription]);
} else {
NSLog(@"导入成功!");
}
}

需要注意的是

1、如果写入的文件不存在则会自动创建

2、如果文件夹不存在,或者路径错误则会出错

3、atomically代表原子性,如果设为YES就会将字符串先全部写入临时文件,最后全部写入目标文件,可以防止文件写入中断错误。

五、可变字符串

NSString和Java中的String类似,下面介绍一个NSMutableString可变长字符串

#pragma mark 可变字符串的创建
void mutableStringCreate(){
//预先分配10个字数的存储空间
NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
//设置字符串内容
[str setString:@"1234"];
//拼接一个字符串
[str appendString:@"567"]; [str appendFormat:@"age is %i", 27];
//替换字符串
NSRange range = [str rangeOfString:@"age"]; //获取位置
[str replaceCharactersInRange:range withString:@"number"];
//插入字符串
[str insertString:@"abc" atIndex:2]; //12abc34....
//删除字符串
[str deleteCharactersInRange:[range]; [str release];
}

NSMutableString是NSString的子类,所以NSString的非私有方法NSMutableString都可以使用。

Objective-C基础笔记(8)Foundation常用类NSString的更多相关文章

  1. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  2. Java 学习笔记(9)——java常用类

    之前将Java的大部分语法都回顾完了,后面添加一些常见的操作,基础语法就结束了.至于在这里再次提到常用类是由于有一部分体现在使用它的继承类或者接口之类的.这些需要有面向对象编程的基础 Object类 ...

  3. Objective-C基础笔记(9)Foundation常用类NSArray

    NSArray用来存储对象的有序列表,它是不可变的 NSArray不能存储C语言中的基本数据类型,如int.float.enum.struct,也不能存储nil,nil代表数组元素的结束 // // ...

  4. Objective-C:Foundation框架-常用类-NSString全解

    Foundation框架中常用的类有字符串.集合.字典等,这里介绍字符串NSString.本文分别介绍了NSString的创建.从文件里读取NSString字符串.通过函数改变外部的NSString变 ...

  5. Java基础(十一)常用类总结(一)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  6. java基础(十三)常用类总结(三)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  7. Java语法基础学习DayEighteen(常用类)

    一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...

  8. Java基础(七)常用类

    一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...

  9. 【学习笔记】QT常用类及应用

    一.QT基类: QObject 二.QT中常用的库 QT中的类根据功能划分在不同的库中,在用户属性.pro文件中可以看到. 三.Qt基本对话框的使用 常用5类: 通过类名可以直接调用类的静态成员函数. ...

随机推荐

  1. Strom 简介,ppt

          数据的生成可以看做一连串发生的离散事件, 这些事件流会伴随着不同的数据流.操作和分析,都会由一个通用的软件框架和基础设施来处理.     Storm 是 实时流计算框架之一.它提供了可容错 ...

  2. spring AOP的Pointcut注解报错

    error at ::0 can't find referenced pointcut spring使用的是4.1.0,在项目中直接复制旧的aspectjweave.jar报错了 然后换成aspect ...

  3. ArcGIS api for javascript—测量,测距问题

    首先量测 var map, toolbar, geometryService ; function init() { map=new esri.Map("map",{ extent ...

  4. linux(debian/ubuntu)下连接安卓手机--小米4为例

    更改:如今小米连接Ubuntu等Linux系统,直接改动手机上的连接方式就可以. --------------------------------------------- 因为安卓手机底层就是lin ...

  5. Codeforces Round #316 (Div. 2) B. Simple Game

    思路:把n分成[1,n/2],[n/2+1,n],假设m在左区间.a=m+1,假设m在右区间,a=m-1.可是我居然忘了处理1,1这个特殊数据.被人hack了. 总结:下次一定要注意了,提交前一定要看 ...

  6. Android开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一. 什么是蓝牙(Bluetooth)? 1.1  BuleTooth是目前使用最广泛的无线通信协议 1.2  主要针对短距离设备通讯(10m) ...

  7. 10.ng-class-even与ng-class-odd

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS模板使你可以把该作用域内的数据直接绑定到所显示的HTML元素 ng-class-even与n ...

  8. python 二分法O(logn)

    def bin_search(data_set, val): low = high = len(data_set) - while low <= high: mid = (low + high) ...

  9. Spring MVC -- UEditor 编辑器整合 上传图片至外部文件夹(非项目文件夹)

    上传图片到外部储存,回显图片 下载全部UEditor资源源码 config.json配置 config.json中添加如下属性 (一定要添加此属性): "physicsPath": ...

  10. 15:Challenge 11(主席树裸题)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...