一、创建字符串的方法

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. hdu 1423 最长公共递增子序列 LCIS

    最长公共上升子序列(LCIS)的O(n^2)算法 预备知识:动态规划的基本思想,LCS,LIS. 问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列). 首先我们可以看到,这个问题具有相 ...

  2. UnrealEngine4编码风格的思考

    第一次拿到UE4源码,扫了一遍.各种宏定义,各种模板,各种类层次.杂乱无章. 后来慢慢明确其规律: UE4的编码风格是在匈牙利命名法的基础下做了改进,使其更适用游戏引擎业务(业务特点:数据可视编辑.脚 ...

  3. C/C++里面的struct和typedef

    今天看到这样的代码 typedef struct _Abc { uint64_t unit_id; ...... } Abc; 开始不理解这个的意思,后来看到这个解释: https://stackov ...

  4. android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断

    1. 当一条SMS到来, 此时SMS是unseen状态, 就会弹出Notification提示用户 2. 但假设处于同一个联系人的界面下, 用户会立马看到这条SMS, 此时这条SMS会被高速的标记为s ...

  5. beego简单的验证码实现以及验证

    /** * 程序 */package controllers import (    "github.com/astaxie/beego"    "github.com/ ...

  6. LDAP实现企业异构平台的统一认证

    LDAP实现企业异构平台的统一认证      技术是为应用服务的,没有应用,技术就无用武之地.同样光配置完LDAP服务器没有任何意义,只有把所有需要认证的环节,只有纳入LDAP系统中,才能使它发挥应有 ...

  7. codeforces 710D Two Arithmetic Progressions(线性同余方程)

    题目链接: http://codeforces.com/problemset/problem/710/D 分析:给你两个方程 a1k + b1 and a2l + b2,求在一个闭区间[L,R]中有多 ...

  8. HTTP 各种特性应用(一)

    一. CORS 预请求 允许方法: GET. HEAD. POST 这三个方法 不需要预请求. 允许 Content-Type text/plain. multipart/form-data. app ...

  9. js 判断对touch事件支持

    $.support = (function() { var support = { touch: !!(('ontouchstart' in window) || window.DocumentTou ...

  10. linux和Windows双系统让 Windows 把硬件时间当作 UTC

    linux和Windows双系统让 Windows 把硬件时间当作 UTC Windows设置如下:开 始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有 ...