iOS之NSString

做了不少时间的iOS开发了,现在在阅读官方文档,特意整理出来,没任何技术含量,纯粹是笔记形式,希望对自己对大家有些帮助。

 

首先,要理解NSString需要学习下字符编码(ASCii,Unicode,UTF8)的一些知识;

可上维基百科搜索:http://zh.wikipedia.org/zh-cn/UTF-8

 

现在开始分享iOS NSString的一些特性:

NSString编码:NSString的本质是基于Unicode编码的字符组成的数组;

NSString创建:如果你是用这种方式创建的:那么temp对象是在编译时被创建,并且在程序运行时一直存在,永远不会被释放;

NSString *temp = @"Contrafibularity";

数据存储:NSString不是设计用来存储任意序列的字节的,如果想要这功能,就用NSData;

生成C String:如果要用NSString产生一个C String,建议使用UTF8String方法;

const char *cString = [@"Hello, world" UTF8String];

  在iOS中,CString是基于UTF-8编码的,注意:此时你得到的cString只是一个临时对象,当自动释放发生后,该对象会失效;如果要继续使用,需要重新申请内存并做拷贝;

从File和URL中读写NSString:

  当读或写一个NSString时,需要明确指定字符编码,如果无法获取到编码信息,官方文档建议如下:

1.Try stringWithContentsOfFile:usedEncoding:error: orinitWithContentsOfFile:usedEncoding:error: (or the URL-based equivalents).These methods try to determine the encoding of the resource, and if successful return by reference the encoding used.
2.If (1) fails, try to read the resource by specifying UTF-8 as the encoding.
3.If (2) fails, try an appropriate legacy encoding. "Appropriate" here depends a bit on circumstances;it might be the default C string encoding, it might be ISO or Windows Latin 1, or something else,
depending on where your data are coming from. 4.Finally, you can try NSAttributedString's loading methods from the Application Kit (such asinitWithURL:options:documentAttributes:error:).These methods attempt to load plain text files, and return the encoding used.They can be used on more-or-less arbitrary text documents, and are worth considering if your application has no special expertise in text.
They might not be as appropriate for Foundation-level tools or documents that are not natural-language text.

 NSScaner:是一个字符串扫描工具,非常好用,运营一个官网的Demo应该就能做一些基本使用了,

NSString *string = @"Product: Acme Potato Peeler; Cost: 0.98 73\n\Product: Chef Pierre Pasta Fork; Cost: 0.75 19\n\Product:Chef Pierre Colander; Cost: 1.27 2\n";
NSCharacterSet *semicolonSet;
NSScanner *theScanner;NSString *PRODUCT = @"Product:";
NSString *COST = @"Cost:";NSString *productName;
float productCost;NSInteger productSold;
semicolonSet = [NSCharacterSet characterSetWithCharactersInString:@";"];
theScanner = [NSScanner scannerWithString:string];while ([theScanner isAtEnd] == NO)
{if ([theScanner scanString:PRODUCT intoString:NULL] &&[theScanner scanUpToCharactersFromSet:semicolonSet intoString:&productName] &&[theScanner scanString:@";" intoString:NULL] &&[theScanner scanString:COST intoString:NULL] &&[theScanner scanFloat:&productCost] &&[theScanner scanInteger:&productSold]){NSLog(@"Sales of %@: $%1.2f", productName, productCost * productSold);} 
} 

 创建标准文件路径:

NSString *path = @"/usr/bin/./grep";
NSString *standardizedPath = [path stringByStandardizingPath];
// standardizedPath: /usr/bin/grep
补全相对路径:
NSString *meHome = [@"~me" stringByExpandingTildeInPath];
// meHome = @"/Users/me"
获取Document目录:
NSString *documentsDirectory;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);if ([paths count] > 0) {documentsDirectory = [paths objectAtIndex:0];
}
路径Component操作:
        
文件名匹配搜索:假设路径“~/Demo/”下有如下文件
ReadMe.txt readme.html readme.rtf recondite.txt test.txt
NSString *partialPath = @"~/Demo/r";
NSString *longestCompletion;
NSArray *outputArray;unsigned allMatches = [partialPath completePathIntoString:&longestCompletioncaseSensitive:NOmatchesIntoArray:&outputArrayfilterTypes:NULL];// allMatches = 3
// longestCompletion = @"~/Demo/re"
// outputArray = (@"~/Demo/readme.html", "~/Demo/readme.rtf", "~/Demo/recondite.txt"
 

转载于:https://www.cnblogs.com/mrfriday/p/3213518.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java调用js查询mongo_mongodb操作之使用javaScript实现多表关联查询

一、数据控制mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败。演示一下发生此类错误的错误提示:二、多表关联查询实现/*声明变量bridge,用来记录两个集合所连接的桥梁。相当于sql语句中的Join on语句,on后…

ABP Framework 研习社经验总结(6.28-7.2)

ABP Framework 研习社经验总结(6.28-7.2)研习社初衷在翻译 《实现领域驱动设计》—— 基于 ABP Framework 实现领域驱动设计实用指南 时,因为DDD理论和实践的宽泛性,不同公司、不同行业、不同项目实现程度不同,觉得有必…

2005.5.21

早上: 4:00电话打来,叫我们去。 我们5:30才起床。 我没有意识到婆婆去世了。上午: 送婆婆到火葬场的车排起了长龙。 一路上,放炮仗,撒纸钱,撒纸元宝。到了火葬场&…

一篇万字长文读懂微软PDB、SourceLink——.net core之nuget 包调试

序言在大前年,为了说服框架组采用Nuget包的形式分发框架类库,我费了老鼻子的劲也没有取得成功,其中最致命的一个问题是,nuget包不能获得源码调试级的支持,在分发和包的管理形式上其比其他方案都优秀。最后折中的选择是…

IIC及OLED实验

I2C (Inter-Integrated Circuit): I2C 是一种用于在芯片之间进行短距离数字通信的串行通信协议。它允许多个设备通过两根导线(一根数据线 SDA 和一根时钟线 SCL)进行通信。I2C 常常用于嵌入式系统中连接传感器、存储器、显示屏和其他外设。 数据线和时钟…

放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。

做过很多winform项目,都为winform控件头疼不已。想实现一些漂亮的样子总是很难。我这里列举几个缺点: 1.winform控件大多是 绝对布局 ,你需要给出准确的坐标。那么在实现居中效果就会很难。 2.学习成本,也了解各个控件的结构&…

数学建模必备算法模型,全新升级!

转眼间2019年已经过去了四分之一,近日,2019年数学建模国赛的时间也已经出来啦,确定为9月12日(周四)18时至9月15日(周日)20时。随着各种各样的数模比赛源源不断地开展,时不时有小伙伴…

好长时间没更新了

这段时间一直都在忙着写CoagelEngine,没时间上来更新。花了一个月的时间,现在基本把渲染器的框架写好了。渲染器是用Visitor模式实现的。同时API无关,理论上来说同样可以支持Directx,不过我没用过DX,现在只实作了GLRen…

boostrap 鼠标滚轮滑动图片_16种基于Bootstrap的css3图片hover效果

bootstrap-image-hover是一款基于Bootstrap的css3图片hover效果。这组图片hover效果共16种特效。同时该特效也支持非Bootstrap版本。使用方法在页面中引入bootstrap相关文件和FontAwesome字体图标文件以及effects.min.css文件。HTML结构该css3图片hover效果的每一种效果都有它们…

从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...

一、移除性算法 &#xff08;remove&#xff09; C Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 // TEMPLATE FUNCTION remove_copy template < class _InIt, class _OutIt, cl…

20 种物体破剖面图,真正的让你脑洞大开

全世界只有3.14 % 的人关注了数据与算法之美有很多东西的内部世界十分复杂&#xff0c;单纯的从表面看难以窥其精锐&#xff0c;今天咱们来看那些被劈成两半展示横截面的东西&#xff1a;1.安全气囊2.打火机3.各种枪械消音器4.集装箱船5.路虎车6.曲棍球头盔7.人类心脏8.数码相机…

一个女孩子对老公/男朋友的要求

*有点害羞&#xff0c;但曾在分别的街头&#xff0c;大声说我爱你。 *同我去庙里求签&#xff0c;轻轻捉住我的手一同跪下。 *言而有信。 *从来不迟到--我迟到他不生气。 *拥抱很久、很紧--每次我起身时几乎是需要慢慢推开他。 *睡得比我迟一点&#xff0c;醒来早一点。 …

你的公司内卷化了吗?

大家看上去都很忙&#xff0c;但就是没结果怎么办&#xff1f;忙有结果都是好的&#xff0c;没有结果都是问题。其实可以从三方面来看这个问题&#xff1a;1、没有正确找到方法大家都在教科书学过一只乌鸦喝水的故事。故事告诉人们遇到困难不要放弃&#xff0c;要运用身边可以利…

java.awt.headless_以编程方式设置java.awt.headless = true

小编典典我正在使用一个main()类&#xff0c;该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。将静态加载块移到类的顶部解决了我的问题。这不起作用&#xff1a;public class Foo() {private static final Color COLOR_BACKGROUND Color.WHITE;static { /* too l…

飘逸的python - hack输出流便于调试

当项目有很多文件时&#xff0c;要找出控制台的输出是在哪里print出来的很麻烦&#xff0c;不过这事对于强大的python来说小菜一碟。 先上代码和效果&#xff0c;再说明。 import sys,traceback class mystdout:stdout sys.stdoutdef write(self,_str):if _str ! \n:filepath…

每日一笑 | 3 X 4 = ?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

ASP.NET下MVC设计模式的实现

1 MVC设计模式简介 MVC由Trygve Reenskaug提出&#xff0c;首先被应用在SmallTalk-80环境中&#xff0c;是许多交互和界面系统的构成基础。MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的&#xff0c;它很好的实现了数据层与表示层的分离。MVC作为一种开发模型…

堵俊平:开放治理是开源社区的终极之路 | DEV. Together 2021 中国开发者生态峰会...

内容来源&#xff1a;2021 年 6 月 5 日&#xff0c;由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上&#xff0c;开放原子开源基金会 TOC 主席、华为计算开源总经理堵俊平发表了《开放治理&#xff1a;开源社区的终极之路》的主题演讲。分享嘉宾&#xff1…

php防止快速刷新代码(分享)_php防止网站被刷新的方法汇总

本文实例讲述了php防止网站被刷新的方法。分享给大家供大家参考。具体方法如下&#xff1a;对于像采用WP建设的站来说&#xff0c;频繁的刷新会导致数据库吃紧。下面附上一段代码,防止频繁的刷新造成的死机情况。方法一,代码如下:session_start();$k$_GET[k];$t$_GET[t];$allow…

2013年7月27日杂记

今天周六加班一直在开会&#xff0c;早上起床后看了JS精粹一书&#xff0c;感觉里面讲的东西真是很好&#xff0c;我应该学习&#xff0c;应该记住其中的知识点然后多实践多真正做出些东西。这会头很晕有点想睡觉&#xff0c;但潜意识居然想看电视&#xff0c;居然不能管住自己…