IOS学习之NSString

NSString:

范围NSRange

用来表示事物相关的事宜

typeof struct _NSRange
{

unsigned localtion;

unsigned length;

} NSRange;

localtion表示字符里面的字符范围或者数组元素的其实范围,length表示该字符串所包含的元素个数。比如:Objective-c is a cool language.中cool可以用location17,length4的范围来表示,location还可以用NSNotFound来表示这个值没有表示范围。

创建NSRange有三种方法

法一:直接赋值给字符串

NSRange range;

range.location=17;

range.length=4

法二:使用C语言的聚合结构赋值机制

NSRage range = {17,4};

法三:使用Cocoa提供的一个快捷函数NSMakeRange()

NSRange range = NSMakeRange(17,4);

NSMakeRange()的好处就是可以在任何函数中使用它,例如作为参数传递:

[anObject flarbulateWithrange:NSMakeRange(17, 4)];

NSString语法就是再双引号前加上@符号,例如@"Hi~”

创建字符串:stringWithFormat

+ (id) stringWithFormat:(NSString *) format,…;

NSString *str;

str = [NSString stringWithFormat:@"I am %d years old and my wight is %d Kg.",23,65];

其结果为:

I am 23 years old and my weight is 65kg.

stringWithFormat是一个类方法。

字符串长度:length

- (NSUInteger) length

(NSUInteger和NSInteger区别就是:牵着是无符号整型,后者是有符号整型。)

可以这样用

NSUInteger len = [str length]

也可以这样

if ([str length] > 35)
{

NSLog(@"Wow,this string is really tall !")

}

字符串比较:isEqualToString

isEqualToString用来比较接收方(recever,接受消息的对象)和作为参数传递过来的字符串。isEqualToString返回一个BOOL值(YES或NO)来表示两个值是否相同。

-(BOOL)isEqualToString:(NSString *) aString

NSString *thing1 = @"Hello
World !";

NSString *thing2 = [NSString stringWithFormat:@"Hello
World !"];

if ([thing1 isEqualToString:thing2]) {

NSLog(@"They are the same !");

}

注:比较两个字符串要使用isEqualToString而不能简单地使用==来判断

要是比较两个字符串,可以使用compare方法

-(NSComparisonResult) compare:(NSString *) aString;

compare来比较两个字符串,并且返回一个NSComparisonResult对象,NSComparisonResult描述如下

enum {

NSOrderedAscending = -1,

NSOrderedSame,

NSOrderedDescending

};

typedef NSInteger NSComparisonResult;

比如:[@“Tron” compare:@“Tom”]将返回NSOrderedAscending(前者的长度大于后者)

[@“genious” compare @“brillient”]将返回NSOrderedDescending(前者长度小于后者)

[@“aaa” compare @“aaa”]将返回NSOrderedSame(两者长度相等)

不区分大小写的比较方式:

-(NSComparisonResult)  compare:(NSString *) aString option:(NSStringCompareOptions) mask;

option是一个掩位码,可以使用|来添加选项标记,常用选项如下

NSCaseInsensitiveSearch:不区分大小写

NSLiteralSearch:完全比较,区分大小写

NSNumericSearch:比较字符串个数而不是字符串的值。如果没有这个选项,100会排在99前面。

所以不区分大小写的比较方式:

if ([thing1 compare:thing2 option:NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame)
{

NSLog(@"They match");

}

字符串包含:

查看字符串里面是否包含另一个字符串,或者查看某些文件名是否是以draft为开头的草稿文件,NSString提供了两种方法,其一是以字符串开头,另一个是以字符串结尾。

- (BOOL) hasPrefix:(NSString *) aString;

- (BOOL) hasSuffix:(NSString *) aString;

NSString *fileName = @"draft-chapter.pages";

if ([fileName hasPrefix:@"draft"])
{

NSLog(@"This is a draft");

} else if ([fileName
hasSuffix:@".pages"]) {

NSLog(@"This is a pages");

}

要判断字符内是否还有别的字符可以使用rangeOfString

-(NSRange) rangeOfString:(NSString *) aString;

可变性

NSString是不可变的,并不是不可以操作他们,可以对其进行字符串的比较、查找、创建等,不过不可以对其进行字符的增减。不过Cocoa提供了一个子类,NSMutableString,可是用来改变字符串。

+ (id) stringWithCapacity:(NSUInteger) capacity;

这样只是给NSMutableString提供一个建议容量,当然也可以超出建议。这个推荐是一个最优值,如果已经开辟了40M的空间,那么后续的操作会很快的。如下可以创建一个可变的字符串

NSMutableString *string = [NSMutableString stringWithCapacity:42];

一旦有了可变的字符串,就可以对生成的字符串进行各种操作

- (void) appendString:(NSString *) aString;

- (void) appendFormat:(NSString *) format,…;

appendString:接受aString参数,然后将其复制到接受对象的末尾。

appendFormat:的工作方式与stringWithFormat类似,但是不会创建字符串,而是将格式化后的字符串添加到字符串末尾。

NSMutableString *string = [NSMutableString stringWithCapacity:50];

[string appendString:@"Hello World !"];

[string appendFormat:@"I am %d years old",23]

结果string被赋值为

Hello World !I am 23 years old

可以使用deleteCharactersInrange方法来删除字符串中的字符。

- (void) deletecharacterInRange:(NSRange *) aRange;

这时比如我们要从通讯录里面删除一个好友Jack,那么可以这么做。首先创建一个好友列表。

NSMutableString *friend = [NSMutableString stringWithCapacity:50];

[friend appendString:@"Tom Mary James Evan Jack Jim”];

接下来要找到Jack名字出现的范围。

NSRange jackRange = [friend rangeOfString:@"Jack"];

jackRange.length++

然后我们就可以从通讯录里面踢掉Jack

[friend deleteCharactersInRange:jackRange];

结果中Jack就从通讯录中删除了

Tom Mary James Evan Jim

这时我们在任何可以使用NSString的时候可以替换为NSMutableString,任何时候。

当然stringWithFormat也可以使用于NSMutableString对象。

NSMutableString *string = [NSMutableString stringWithFormat:@"Joy-%d",2];

这样string的初始值就是Joy-2

时间: 2024-07-29 01:25:20

IOS学习之NSString的相关文章

iOS学习笔记——NSString的常用方法

创建一个新字符串并将其设置为 path 指定的文件的内容,使用字符编码enc,在error上返回错误 + (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error; 创建一个新字符串并将其设置为 url 指定的内容,使用字符编码enc,在error上返回错误 + (id)stringWithContentsOfFile:(NSString *)path encod

iOS学习之Map,定位,标记位置的使用

iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可.这次要实现的效果如下: 有标注(大头针),定位,地图. 1.添加地图 1.1 新一个Single View app ,选择默认项,创建后,在ViewController.h [cpp] view plaincopy #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocati

IOS学习笔记 -- Modal和Quartz2D

一. Modal1.Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止;Modal只是改变了View的现实,没有改变rootViewController 2.常用方法1>.以Modal的形式展示控制器- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion2>.关

ios学习总结--常用的字符串操作

本文总结一下我们常用的字符串的基本操作,在此与大家分享学习. 1.字符串的创建以及初始化 string:方法:创建字符串 NSString *str1 = [NSString string]; str1 = @"Test1"; stringWithstring:方法:用字符串来创建字符串 1 NSString *str2 = [NSString stringWithString:str1]; UTF8String:方法:NSString转换成C字符串 NSString *str2 =

iOS学习之iOS沙盒(sandbox)机制和文件操作复习

1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. 1.1.每个应用程序都有自己的存储空间 1.2.应用程序不能翻过自己的围墙去访问别的存储空间的内容 1.3.应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行.     通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是

iOS学习之 plist文件的读写

在做iOS开发时,经经常使用到到plist文件,  那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ,因此通常被称为 plist文件.文件是xml格式的. Plist文件通经常使用于储存用户设置,也能够用于存储捆绑的信息 我们创建一个项目来学习plist文件的读写. 1.创建项目Plistdemo 项目创建之后能够找到项目相应的plist文件,打开例如以下图所看到的: 在编辑器中显示相似与表

我的IOS学习资源收录

IOS7视频教程-storyboard与UIApplication http://v.youku.com/v_show/id_XNzMxMjgwNzEy.html 关东升老师的ios视频教程 iPhone与iPad开发实战-ios经典应用剖析-7大项目实战开发 1第1讲工具类应用密码生成(Amuck Password Generator)57分钟   2第2讲工具类应用密码生成(Amuck Password Generator)52分钟   3第3讲工具类应用--密码生成(Amuck Passw

iOS学习笔记-精华整理

iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁. 2-成员属性:     readonly:不指定readonly,默认合成getter和setter方法.外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全

IOS学习:常用第三方库(GDataXMLNode:xml解析库)

IOS学习:常用第三方库(GDataXMLNode:xml解析库) 分类: ios开发学习2013-05-30 09:45 4443人阅读 评论(0) 收藏 举报 iOSXMLGDataXMLNode 一.GDataXMLNode说明 GDataXMLNode是Google提供的用于XML数据处理的类集.该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法. 使用方法: 1.获取GDataXMLNode.h/m文件,将GDataXMLNo