Objective-C学习篇06—NSString与NSMutableString
NSString
OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang”表示的是一个NSString类型的常量.
NSString 是一个不可变的字符串类,继承自 NSObject ,用NSString创建出来的字符串对象,一经创建就不能再修改了.我们可以对它执行查找或比较等操作,但是不能通过增加,删除它的字符来动态地改变它.
NSString主要的方法都在Foundation/NSString.h中定义的,NSString提供了很多方法的接口,但是这些方法的实现都是由内部具体实现的.下面将对NSString的主要方法进行说明:
1. 快速创建字符串对象
NSString *str = @"叔叔约吗?";
2. 生成指定格式的字符串
格式化创建字符串 initWithFormat:
便利构造器方法创建 stringWithFormat:
NSString *str = [[NSString alloc] initWithFormat:@"name:%@ age:%ld, name, age];
NSString *str = [NSString stringWithFormat:@"name:%@ age:%ld, name, age];
练习:将字符串@"2015.11.18"和@"2016.1.1"初始化为一个新的字符串@"2015.11.18--2016.1.1"
NSString *date = [NSString stringWithFormat:@"%@%@%@", @"2015.11.18", @"--", @"2016.1.1"];
3. 将C语言中的字符串转换为OC中的字符串对象 initWithUTF8String:
NSString *str = [NSString alloc] initWithUTF8String:"iOS"];
4. 使用文件中的文本内容以指定编码格式创建字符串对象 initWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>
第一个参数: 文件路径
第二个参数: 编码格式 NSUTF8StringEncoding 8位Unicode编码 适用于使用中文的编码格式
第三个参数: 如果出错, 这个参数用来存储报错信息,一般填nil
NSString *str = [[NSString alloc] initWithContentsOfFile:@"/Users/Desktop/Product/OC/Lesson/OCLessonNSString-04/OCLessonNSString-04/Harbingwang.txt" encoding:NSUTF8StringEncoding error:nil];
对应的便利构造器 stringWithContentsOfFile: encoding: error:
5. 计算字符串的长度 length
NSString *string = @"iPhone6splus买"; // 无论是数字,英文还是汉字,都是按一个字符来算 NSUInteger length = string.length; //可以使用点语法 NSLog(@"%lu", length);
首先在这里补充两点:
1.父串与子串的概念: A串中存在连续的多个字符和B字符串相同,A是B的父串,B是A的子串
2. NSRang 是一个表示范围的结构体,其中包括了数据的首地址location和数据长度legth
typedef struct _NSRange { NSUInteger location; // 起始位置 NSUInteger length; // 从起始位置开始取多长 } NSRange;
6.字符串的截取
substringWithRange:
// a. 返回一个新字符串,新字符串开始的位置和长度由Rang决定
NSRange rang = {12, 1}; NSString *string = [string substringWithRange:rang];
substringToIndex:
// b. 获取 从0开始到某个位置 的字符串,但是 不包括提供位置的字符 NSString *substring = [string substringToIndex:5];NSLog(@"%@", substring); // 返回的是新的字符串对象.所以用 %@ 占位
substringFromIndex:
// c. 获取从某个位置开始到结尾的子串,包含提供位置的字符
NSString *substring = [string substringFromIndex:5]; NSLog(@"%@", substring);
7.字符串的检索
rangeOfString: // 返回一个新字符串,新字符串开始的位置和长度由Rang决定 NSString *string = @"iloveyou"; // 有如上字符串,想得到子串 'love'在string4中的范围 NSRange rang1 = [string rangeOfString:@"love"]; NSLog(@"%lu %lu", rang1.location, rang1.length);
8.字符串的拼接
stringByAppendingFormat: //格式化拼接字符串(可以拼接多个) NSString *string1 = @"iOS"; NSString *string2 = @"开发";NSString *newString = [string1 stringByAppendingFormat:@"%@", string2]; stringByAppendingString: // 拼接字符窜(只能拼接一个) NSString *newString2 = [String1 stringByAppendingString:@"入门基础"];// 打印iOS入门基础
9.字符串的替换
stringByReplacingOccurrencesOfString: withString: // 将目标字符串从父串中替换为我们给定的字符串 // 找到目标字符串就返回,找不到就返回原串 // 例如: newString iOS开发入门基础 把 iOS 替换为 Android NSString *newString1 = [newString2 stringByReplacingOccurrencesOfString:@"iOS" withString:@" Android"]; stringByReplacingCharactersInRange: withString: // 根据提供的字符串范围进行替换 NSRange rang2 = {0, 2}; NSString *newString4 = [newString3 stringByReplacingCharactersInRange:rang2 withString:@"dong"];
10.判断
hasPrefix: // 判断一个字符串是否具有某个前缀 NSString *str15 = @"iOS开发基础"; BOOL isHas = [str15 hasPrefix:@"iOS"];// hasPrefix返回的是一个BOOL值 NSLog(@"%@", isHas ? @"有这个前缀" : @"没有这个前缀"); hasSuffix: //判断一个字符串是否具有某个后缀 isHas = [str15 hasSuffix:@"3G学院"]; NSLog(@"%@", isHas ? @"有这个后缀" : @"没有这个后缀");
isEqualToString:
// 判断两个字符串对象是否相等
NSString *str1 = @"iOS";
NSString *str2 = @"开发";
BOOL isSame = [str1 isEqualToString:str2];
NSLog(@"%@", isSame ? @"相同" : @"不相同");
// 练习
判断字符串 @"HarbingWang"是否具有@".jpg"的后缀,如果没有就为其拼接上一个@".jpg",如果有就将@".jpg"替换为@".png" NSString *str = @"HarbingWang"; BOOL isHasJpg = [str16 hasSuffix:@".jpg"]; NSString *newStr = isHasJpg ? [str16 stringByReplacingOccurrencesOfString:@".jpg" withString:@".png"] : [str16 stringByAppendingString:@".jpg"]; NSLog(@"%@", newStr);
11. 比较
比较两个字符串的大小(区分大小写) compare:
- (NSComparisonResult)compare:(NSString *)string; // 返回值为: NSComparisonResult 是一个枚举类型的值,用于显示比较结果 enum { NSOrderedAscending = -1, // 升序,前一个小于后一个 NSOrderedSame, // 相同,前后相同 NSOrderedDescending // 降序,前一个大于后一个 }; typedef NSInteger NSComparisonResult;
NSString *str18 = @"NBA"; NSString *str19 = @"nba"; NSComparisonResult n = [str18 compare:str19]; switch (n) { case NSOrderedAscending: NSLog(@"%@ < %@", str18, str19); break; case NSOrderedSame: NSLog(@"%@ == %@", str18, str19); break; case NSOrderedDescending: NSLog(@"%@ > %@", str18, str19); break; default: break; } NSLog(@"%ld", n);
// 不区分大小写的比较 caseInsensitiveCompare:
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
NSComparisonResult 返回值同上,为枚举值
NSComparisonResult m = [str11 caseInsensitiveCompare:str12]; NSLog(@"%ld", m); // 输出 0 表示str11和str12相同,不区分大小写,复合实际情况
NSMutableString
NSMutableString 可变字符串,继承自NSString,所以 NSMutableString 可以用它父类所有的实例变量和方法,该类创建的字符串是一个可变字符串,可以支持增删查改等动态操作.一般在项目开发中鼓励使用NSMutableString类
1. 实例对象的生成和初始化 initWithCapacity:
便利构造器方法 stringWithCapacity:
NSMutableString *mStr = [[NSMutableString alloc] initWithCapacity:0];
NSMutableString *mStr1 = [[NSMutableString stringWithCapacity:0];
初始化一个NSMutableString类型的对象,Capacity 容量的意思,指明了要被初始化的NSMutableString对象的大小. NSMutableString的对象会随着字符串的变化而自动扩展内存,如果存放的内容小于这个空间,则可以直接放入,如果大于虚拟的空间就继续开辟新的空间.
2. 可变字符串的快捷创建方式 .mutableCopy
NSMutableString *mStr3 = @"i am a good student".mutableCopy; //mutableCopy将常量区的内容拷贝一份放到堆区
3.追加字符串
在末尾追加一个字符串 appendString:
在末尾追加一个格式化字符串 appendFormat:
NSMutableString *mutalbeStr = [NSMutableString stringWithFormat:@"My age is 10 "]; [mutalbeStr appendString:@"11 12"]; // appendString方法没有返回值,说明是直接在str字符串后面进行拼接 NSLog(@"%@",mutalbeStr); // 打印:My age is 10 11 12 // 不可变数组中也提供了拼接的方法,我们不妨对比下: NSString *str = [NSString stringWithFormat:@"My age is 10 "]; NSString *str2 = [str stringByAppendingString:@"11 12"]; NSLog(@"%@",str2); // 打印:My age is 10 11 12
可以看出:NSString一旦定义了str字符串它本身就不可变了,虽然NSString类方法也提供了拼接的方法如stringByAppendString方法但是它返回的是一个新的字符串。而NSMutableString提供的拼接方法appendString方法是在原有的字符串上直接拼接它没有返回值。这就是可变和不可变字符串的本质
4. 插入字符串的方法 insertString: atIndex:
[mStr4 insertString:@"博客园" atIndex:0]; NSLog(@"%@", mStr4);
5. 根据范围删除子串 deleteCharactersInRange:
// 创建一个表示范围的结构体变量 NSRange rang3 = NSMakeRange(0, 2); // 根据范围删除子串 deleteCharactersInRange: [(父串) deleteCharactersInRange:rang3]; NSLog(@"%@", mStr2);
6. 给字符串对象赋值,将aString复制一份,将其设置为消息接受者的内容 setString
7. 关于大小写
7.将字符串的每个字符全部大写 uppercaseString //将字符串mStr3的每个字符都大写 NSString *upString = [mStr3 uppercaseString]; //可以直调用方法,也可以使用点语法 NSString *upString = mStr3.uppercaseString; 8. 将字符串的每个字符全部小写 lowercaseString NSString *lowString = mStr3.lowercaseString; 9. 将lowString的单词的首字母都大写 capitalizedStringNSString *capitonString = mStr3.capitalizedString;
Objective-C学习篇06—NSString与NSMutableString的更多相关文章
- 【从零开始自制CPU之学习篇06】寄存器
上一篇文章学习了总线的相关知识,途中ABC当时假设为一个个的8位寄存器.这一篇要学习怎么构建这个寄存器. 这分为两个三个部分,数据输入,寄存器,数据输出.首先不管输出,来看数据输入和寄存器这两个部分. ...
- (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...
- OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...
- OC本学习笔记Foundation框架NSString与NSMutableString
一.NSString与NSMutableString 相信大家对NSString类都不陌生.它是OC中提供的字符串类.它的对象中的字符串都是不可变的,而它的子类NSMutable ...
- OC学习篇之---总结和学习目录
今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生 ...
- iOS系列 基础篇 06 标签和按钮 (Label & Button)
iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...
- Objective-C: 字符串NSString与NSMutableString
字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就 ...
- (转载)OC学习篇之---概述
前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲 ...
- bjective-C 中核心处理字符串的类是 NSString 与 NSMutableString
Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...
随机推荐
- Unity3d IOS中的IGUI控件
Unity3d IOS中的IGUI控件 @灰太龙 群63438968 我讲一下IOS中用的UI,我们采用IGUI,需要使用IGUI的高版本,在Unity3d 4.2中也可以使用的! 之前IGUI有个 ...
- PSoC电容式触摸感应技术
PSoC是由Cypress半导体公司推出的具有数字和模拟混合处理能力的可编程片上系统芯片,某些系列的PSoC(如CY8C21X34系列),由于其内部配备的特殊资源,使得它可以很容易地实现电容式触摸感应 ...
- 一句话改变TGraphicControl控件的left坐标的前世今生
稍微用脑子想了一下,图形控件没有句柄,因此先把自己的坐标改一改,然后只要把父控件的某些区域Invalidate一下就可以了,WM_PAINT消息一来,父控件就会重绘所有子图形控件,就达到了相应的效果. ...
- Android 中使用MediaRecorder进行录像详解(视频录制)
在这里给出自己的一个测试DEMO,里面注释很详细.简单的视频录制功能. package com.video; import java.io.IOException; import android.ap ...
- MySQL默认INFORMATION_SCHEMA,MySQL,TEST三个数据库用途
本文简要说明了MySQL数据库安装好后自带的INFORMATION_SCHEMA,MySQL,TEST三个数据库的用途. 第一个数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式 ...
- 【HDOJ】1760 A New Tetris Game
博弈,主要是求SG值.终于做出点儿感觉. /* 1760 */ #include <cstdio> #include <cstring> #include <cstdli ...
- 实战weblogic集群之创建domain,AdminServer
在weblogic安装完后,接下来就可以创建domain,AdminSever了. 第1步: $ cd /app/sinova/Oracle/wlserver_10./common/bin $ ./c ...
- 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 25216 Accepted: 6882 ...
- oracle 表查询(2)
使用逻辑操作符号 问题:查询工资高于500 或者是岗位为MANAGER 的雇员,同时还要满足他们的姓名首字母为大写的J? or job = 'MANAGER') and ename LIKE 'J%' ...
- Implement Stack using Queues ——LeetCode
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...