objective-c系列-NSString
C中没有字符串变量的概念
只有一个字符串常量的概念
即: “abcd”
在c中,用一个字符串指来指向一个内存地址,
然后从该地址往后,遇到'\0'结束,这一段
内存就表述为一个字符串
char *s=地址;
那么s就代表一个c字符串
对c字符串符的处理有一套函数:
strlen 求字符中长度,只算有效字符个数,不含'\0'
strcpy 字符串复制
strncpy 指定长度复制
strcat 连接两个字符串
strncat 指定长度连接
strchr 在字符串中从前往后查找某一个字符,返回地址
strrchr 在字符串中从后往前查找某一个字符,返回地址
strstr 在字符串中找子串,并返回子串的地址
strcmp 比较两字符串的大小
strncmp 指定长度内比较两个字符串的大小
strtok 分割字符串
strpbrk
说明: s1, “abcde1xx”
s2, "123"
strpbrk(s1, s2)
strcpsn
strpsn
oc的字符串一种对象,同样需要提供一套操作字符串的方法
对比:
C字符串 oc字符串
常量: "abc" @"abc"
变量: char * NSString*
求长度: strlen length
查找: strchr(s1,'c') ?
strstr(s1,s2) ?
比较 strcmp ?
****************************************************
//定义一个字符指针,让它指向一个字符串常量
char * cstr="abc";
//定义一个oc的字符串对象(指针),让它指向一个oc字符串常量
NSString* ocstr=@"abc";
****************************************************
//求长度
//C字符串求长度:
printf("cstr长度为:%ld\n", strlen(cstr));
//oc字符串求长度:
NSLog(@"ocstr的长度为:%lu", [ocstr length]);
****************************************************
//用构造方法来构造oc字符串
void initForNSString(void)
{
NSString * str1 = [[ NSString alloc]initWithFormat:@"[%i]-[%c]-[%@]-[%s]",123,'a',@"ocstring", "cstring" ];
NSLog(@"str1: %@", str1);
// 不要使用:NSString * str2 = [[ NSString alloc]initWithString:@"literal"];
// 而要直接使用: NSString *str2 = @"literal";
NSString *str2 = [[ NSString alloc]initWithString:str1]; //等效于: NSString * str2 = str1;
NSLog(@"str1:%p str2:%p", str1, str2);// str1和str2地址相同,很明显系统不允许浪费内存
****************************************************
//从c字符串转为oc字符串
NSString *str3 = [[ NSString alloc]initWithUTF8String:"cstring"];
// NSString *strr1 = @"aerg";
NSLog(@"str3: %@", str3);
char buf[]="abcd";
NSString *str4 = [[ NSString alloc]initWithUTF8String:buf];
NSLog(@"str4: %@", str4);
****************************************************
相应的类方法生成字符串
NSString *str1 = [ NSString stringWithFormat:@"[%i]-[%s]",123,"cstring"];
NSString *str2 = [ NSString stringWithString:str1];
NSString *str3 = [NSString stringWithUTF8String:"cstring"];
****************************************************
//比较两个oc字符串的大小
//回顾: c: strcmp(s1,s2) s1="ab", s2="af"
// 返回值: 'b'-'f'
// 但oc字符串的比较结果只有三个值: -1,0,1
// 且oc把这三个值定义成枚举:
//比较方法:
// NSComparisonResult;
// typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
// typedef enum {NSOrderedAscending=-1,NSOrderedSame,NSOrderedDescending} NSComparisonResult;
NSComparisonResult result=[s1 compare:s2];
switch (result) {
// 升序
case NSOrderedAscending:
NSLog(@"s1<s2");
break;
case NSOrderedDescending:
NSLog(@"s1>s2");
break;
case NSOrderedSame:
NSLog(@"s1==s2");
break;
default:
break;
}
//比较两个字符串是否相等
if( [@"abc" isEqualToString:@"abc"] )
NSLog(@"abc is equal to abc");
else
NSLog(@"abc is not equal to abc");
}
****************************************************
//访问字符串的某个字符
// char *s="abc"; 访问: s[i]或 *(s+i)
// 但oc的字符串不能用[i]
NSString * str=@"123456789";
unichar ch=[str characterAtIndex:0];
printf("ch=%c\n",ch);
****************************************************
//求子串
//认识一个结构体:
// NSRange
// typedef struct _NSRange {
// NSUInteger location; //起始下标
// NSUInteger length; //长度
// } NSRange;
NSString * string = @"12345abc9";
// rangeOfString: 方法返回的是一个结构体
NSRange range= [string rangeOfString:@"abc"];
NSLog(@"起始下标:%lu, 长度:%lu", range.location,range.length);
// 从下标起到末尾
NSString *substr1= [string substringFromIndex:2];
NSLog(@"substr1: %@",substr1);// 345abc9
// 从开始到下标处停止(不包括)
NSString *substr2 = [ string substringToIndex:2];
NSLog(@"substr2: %@", substr2);//12
//结构体之间的赋值:
// 结构体初始化定义时用大括号
NSRange r1 = {5,3};
NSRange r2;
// 强转后赋值
r2=(NSRange){5,3};//不能写为:r2 = {5, 3};必须强转//论声明时初始化的好处
//指定取出某一连续部分
NSString *substr3 = [ string substringWithRange: NSMakeRange(5, 3) ];
NSLog(@"substr3: %@", substr3);
//XMakeRange是一个带参宏
//带参宏,也叫宏函数,但不是真正的函数,只做替换
#define XMakeRange(loc, len) (NSRange){loc,len}
NSString *substr4 = [string substringWithRange:XMakeRange(5, 3)];
NSLog(@"substr4: %@", substr4);
****************************************************
//字符串的其它方法
float f= [@"1.23a" floatValue] ;
NSLog(@"f=%f",f);
float f2 = [@"abc1.23abc" floatValue];
NSLog(@"f2=%f",f2);
float f3 = [@"123abc345" floatValue];
NSLog(@"f3=%f",f3);
// floatValue -> atof
NSInteger i=[@"123abc" integerValue];
NSLog(@"i=%li",i);
int i2 = [@"123abc" intValue];
NSLog(@"i2=%i", i2);
// intValue -> atoi
// integerValue -> atol
BOOL bl = [@"02abc" boolValue];
if (bl) {
NSLog(@"bl为真");
}
else{
NSLog(@"bl为假");
}
//大小写转换
NSString * srcStr = @"ABCdef";
NSString * upstr= [srcStr uppercaseString];
NSString *lowStr=[srcStr lowercaseString];
//oc字符串转c字符串
NSString *ocStr=@"abc";
const char * cStr = [ocStr cStringUsingEncoding:NSUTF8StringEncoding];
NSLog(@"从oc得到c字符串:%s", cStr);
// *cStr='a';取*自然就是指第一个字符,为'a'
****************************************************
类方法中不能访问实例变量和实例方法
实例变量是对应类声明的对象的,不同的对象分别对应不同的实例变量,类方法是类直接调用的方法,若是访问实例变量的话,从道理上讲是没有意义的!
****************************************************
****************************************************
objective-c系列-NSString的更多相关文章
- Objective - C 中NSString (字符串)与C中的字符串转换问题
NSString是一个常用的类,NSString是原生支持unicode C中的字符串 比如char * a = "hello world"; 是utf8类型的, char* d ...
- Foundation框架系列-NSString
NSString OC字符串与C语言字符串转换 NSString *str = @"Hello world ! !"; // OC字符串 --> C语言字符串 char *c ...
- iOS开发 - OC - 苹果为大家提供的后台:CloudKit 的简单使用
一.什么是cloudKit 移动开发中,网络请求数据是日常中用到的,我们习惯把一些用户改动的数据存在服务器,以便下次请求使用.或者开发者方通过服务器将编辑的数据发送给用户.但是这一切都建立在我们的AP ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- iOS开发Extra系列:NSString***
在iOS系统,NSString可能是最常用的对象,很多用法跟其他语言不一样. 字符串对象NSString 使用格式创建字符串 1 2 3 4 5 + (id)stringWithFormat:(NSS ...
- Objective-C(NSString、BOOL、多文件开发)
NSString 表示oc当中的字符串类 %@是oc当中对象的格式符 printf不能打印oc当中的对象 通过stringWithFormat:这个类方法,打印格式化的字符串 例 int a = 10 ...
- Objective C NSString 编码成URL 特殊字符处理
找了一下网上的教程都是使用类似以下代码,Xcode提示这个CoreFoundation不受ARC管理,所以折中的方式是添加__bridge. NSString *encodedValue = (__b ...
- Objective C ARC 使用及原理
手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...
- 刨根问底Objective-C Runtime
http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...
随机推荐
- 基于HT for Web 快速搭建3D机房设备面板
以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观.今天我们就在HT for Web的3D技术上完成设备面板的搭建. 我们今天模拟 ...
- Emit学习(1) - HelloWorld
之前看过Dapper(使用到了Emit), CYQ.Data(另一种思路,没有使用Emit)类的框架之后, 也想自己做一个小框架玩一下, 不过此时能力太过欠缺, 做不了Cyq.Data或者PDF.Ne ...
- ligerUI布局时,Center中的Tab高度太小问题解决
1.0 引用的js,css <link href="/Content/scripts/ligerUI/skins/Aqua/css/ligerui-all.css" rel= ...
- 百度地图API实现地图定位
1.引用JS: <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0& ...
- 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...
- 帝国cmsV6.6版数据表
信息表:每个模型都有以下六个表 phome_ecms_news 新闻系统模型-主表 phome_ecms_news_data_1 新闻系统模型-副表1 副表可无限增加 信息表 phome_ecms_n ...
- C#单纯的字母数字ASCII码转换
字母转换成数字 byte[] array = new byte[1]; //定义一组数组array array = System.Text.Encoding.ASCII.Ge ...
- 基于吉日嘎拉的OA协同办公模块重写
这一个月的业余时间主要是在忙这个重构的事情,将吉日嘎拉自带的文档管理.公司公告.留言板.通讯录.周任务.考勤,全部重新建表,重构代码和UI. 目前根据中小企业常用的日常办公需要,搞定了公告栏.任务中心 ...
- Android使用SAX解析XML(1)
可扩展标记语言XML是一种数据交换格式,允许用户自己定义,适合Web传输,能提供独立于程序的数据.XML在Android中也有广泛的应用,Android解析XML的方法有很多,本文介绍使用SAX(Si ...
- 【Effective Java】8、优先考虑类型安全的异构容器
有的时候我们一个容器只有一个类型或几个类型并不能满足我们的要求,比如set中存放的元素类型都是同一种,map也就指定的两种 这里我们可以将键进行参数化,而不是将容器参数化,也就是我们可以给容器传一个键 ...