NSString用法,object-C数组以及字符串拼接和分割
一、介绍
使用NSString创建一个字符串的代码如下:
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];
NSString *str=@"Programming is fun";
NSLog(@"%@",str);
[pool drain];
return 0;
}
Objective-C的字符串是由char组成,NSString的字符串是由unichar组成,unichar的字节数是可变的。
默认创建的字符串是NSConstantString类的常量字符串。
二、常用的方法
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];
//字符串声明、赋值、转换
NSString *str1=@"This is string A";
NSString *str2=@"This is string B";
NSString *res;
res=[NSString stringWithString:str1];
NSLog(@"with:%@",res);
res=[str1 stringByAppendingString:str2];
NSLog(@"appending:%@",res);
NSLog(@"Lowercase of str2:%@",[str2 lowercaseString]);
NSLog(@"Uppercase of str2:%@",[str2 uppercaseString]);
//字符串截取
NSLog(@"Length of str1 is:%lu",[str1 length]);
NSLog(@"First 3 chars of str1:%@",[str1 substringToIndex:3]);
NSLog(@"Chars from index 5 of str1:%@",[str1 substringFromIndex:5]);
NSLog(@"Chars from index 8 through 13:%@",[[str1 substringFromIndex:8]substringToIndex:6]);
NSLog(@"Chars from index 8 through 13:%@",[str1 substringWithRange:NSMakeRange(8,6)]);
//字符串比较
if ([str1 isEqualToString:str2]) {
NSLog(@"str1==str2");
} else {
NSLog(@"str1!=str2");
}
NSComparisonResult compareResult;
compareResult=[str1 compare:str2];
if (compareResult==NSOrderedAscending) {
NSLog(@"str1<str2");
} else if(compareResult==NSOrderedSame) {
NSLog(@"str1=str2");
} else {
NSLog(@"str1>str2");
}
//字符串查找
NSRange subRange;
subRange=[str1 rangeOfString:@"string A"];
NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);
subRange=[str1 rangeOfString:@"string B"];
if (subRange.location==NSNotFound) {
NSLog(@"String not found");
} else {
NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);
}
[pool drain];
return 0;
}
stringWithString通过从给定的字符串对象中复制字符串,来创建并返回一个字符串对象。语法是"+ (id)stringWithString:(NSString *)aString"。
stringByAppendingString在接受字符串追加给定的字符串,并返回追加后的新字符串。语法是:"- (NSString *)stringByAppendingString:(NSString *)aString"。
lowercaseString返回字符串的小写,语法是"- (NSString *)lowercaseString"。
uppercaseString返回字符串的大写,语法是"- (NSString *)uppercaseString"。
length返回Unicode字符数。语法是"- (NSUInteger)length",NSUInteger表示一个无符号的整形数。
substringToIndex返回一个字符,它从首字符(首字符的索引是0)直到指定的索引字符(不包括指定的索引字符),并返回截取出来的新字符串。语法是"- (NSString *)substringToIndex:(NSUInteger)anIndex"。
substringFromIndex返回一个子字符串,它从指定的索引的字符开始(包括指定的索引字符),直到字符串的结尾。语法是"- (NSString *)substringFromIndex:(NSUInteger)anIndex"。
substringWithRange返回指定范围的子字符串。语法是"- (NSString *)substringWithRange:(NSRange)aRange"。 索引范围依靠NSRange对象来指定。
isEqualToString判断两字符串是否相等,并返回一个布尔值,语法是"- (BOOL)isEqualToString:(NSString *)aString"。
compare返回一个比较结果的对象,语法是:"- (NSComparisonResult)compare:(NSString *)aString"。NSComparisonResult有三种情况,表示给定的数字是否大于(NSOrderedAscending),等于(NSOrderedSame)或小于(NSOrderedDescending)接收器的值。compare方法区分大小写,而caseInsensitiveCompare方法不区分大小写。
rangeOfString在接受字符串中查找指定字符串,如果有则返回第一次出现的范围。这个范围是用一个结构变量来表示的,结构成员location的值表示起始的索引,结构成员length表示子字符串的长度。如果没有则返回范围的location值为NSNotFound。
Obj-C只是增加了一点“特殊语料”的C语言,所以可以用printf()代替NSLog()。但我们建议使用NSLog,因为它添加了特性,例如时间戳,日期戳和自动附加换行符(‘\n’)等。
1.OC的数组成员是任意的对象指针 与C中的链表结构类似(以nil结尾) 一切的数组操作不能越界
OC的数组分为不可变数组 NSArray 可变数组 NSMutableArray
NSArray
NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil];
//通过下标获取数组成员(下标从0开始)
NSLog(@"%@",[array objectAtIndex:0]);
//获取数组有效成员个数 (不包括nil)
NSLog(@"%ld",[array count]);
for (i = 0; i < [array count]; i++) {
//遍历数组(C方法)
NSLog(@"%@",[array objectAtIndex:i]);
}
//(OC)查看数组内容(先给array发送description消息,然后给每个成员都发送一个description消息)
NSLog(@"%@",array);
//创建数组对象 相当于拷贝
NSArray * array1 = [[NSArray alloc]initWithArray:array];
//创建数组对象 相当于拷贝
NSArray * arry2 = [NSArray arrayWithArray:array];
//正序枚举器
//创建一个枚举器 把数组的每个元素的地址一次赋给枚举器,然后建立起某种关联 (枚举器只能用来读数组成员)
//枚举时 会和数组创建某种关联(修改监视器/迭代器) 限制枚举的同时不能修改元素 只能读不能写
NSEnumerator * enumer = [array objectEnumerator];
id obj;
//第一次循环把数组的第一个元素赋给obj 第二次循环把第二个数组元素赋给obj
while (obj = [enumer nextObject]) {
//遍历数组
NSLog(@"%@",obj);
}
//快速枚举 第一次循环把array的第一个元素赋给ob 第二次循环把array的第二个元素赋给ob 直到nil(只能读不能改)
for(id ob in array){
NSLog(@"%@",ob);
}
//逆序输出数组(创建逆序枚举器 第一次循环把最后一个元素赋给obj )
NSEnumerator * enumer1 = [array reverseObjectEnumerator];
while (obj = [enumer1 nextObject]) {
NSLog(@"%@",obj);
}
if ([obj isKindOfClass:[Dog class]])
//获取类的类型 判是否是指定类的对象
if ([obj isMemberOfClass:[Dog class]]) {
}
2.不可变数组
----------------------------字符串查找----------------------------
NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"one", nil];
NSUInteger index = [array indexOfObject:@"one123"];
//返回第一个找到的数组成员对应的下标 找不到返回NSNotFound
index = [array indexOfObject:@"one" inRange:NSMakeRange(1, 3)];
//在指定范围内查找
if (index != NSNotFound) {
NSLog(@"%ld",index);
}
----------------------------抽取 组成新的数组----------------------------
NSArray * array1 = [array objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]];
《数字集合》
NSIndexSet这是个数字集合类
[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]产生一个数字集合
3.可变数
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
//在数组尾部插入元素
[array addObject:@"five"];
//在数组指定下标位置插入元素(不能越界,最大值为length)
[array insertObject:@"six" atIndex:5];
//删除指定元素(数组中出现的所有位置都将被删除)
[array removeObject:@"six"];
//从指定下标位置开始的指定长度内删除指定元素
[array removeObject:@"two" inRange:NSMakeRange(0, 3)];
//删除最后一个元素
[array removeLastObject];
//删除所有元素
[array removeAllObjects];
//将指定下标位置元素替换为指定的元素
[array replaceObjectAtIndex:3 withObject:@"ios"];
//将指定下标的两个元素进行交换
[array exchangeObjectAtIndex:0 withObjectAtIndex:3];
4.字符串分割与拼接
//@"" 空的字符串对象
---------------------字符串分割实例---------------------
NSString * ptr = @"I am a man";
//将字符串整体作为分割条件 返回值为NSArray不可变数组
NSArray * array = [ptr componentsSeparatedByString:@" "];
//若修改,则将NSArray转化为NSMutableArray
NSMutableArray * array1 = [NSMutableArray arrayWithArray:array];
//以字符串中的字符作为分割条件进行分割
NSArray * array2 = [ptr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];
《字符集合》
NSCharacterSet 这是个字符集合类
//把字符串转化为字符集合
[NSCharacterSet characterSetWithCharactersInString:@", "]
---------------------字符串拼接实例---------------------
NSString * str = [array componentsJoinedByString:@" "];
若分割条件出现在开头或者结尾,则会出现空串@"",如果不需要,则需要转化成NSMutableString对空串进行处理
func1: [array1 removeObject:@""];
//找到空串直接删除
func2: for(id obj in array1){
if([obj length] == 0)
//空串的长度为0
if([obj isEqualToString:@""])
//与空串进行比较(字符串是不能进行==比较的,要使用函数)
}
NSString用法,object-C数组以及字符串拼接和分割的更多相关文章
- OC 数组以及字符串拼接与分割
//@""空的字符串对象-------分割 NSString * ptr = @"I am a man"; NSArray * array = [ptr com ...
- Obj-C数组以及字符串拼接与分割
本文转载至 http://mobile.51cto.com/iphone-392148.htm Obj-C只是增加了一点“特殊语料”的C语言,所以可以用printf()代替NSLog().但我们建议使 ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- java数组、字符串拼接
1. 数组实现拼接 int[] arr ={11,22,33,44,55,66}; System.out.print("["); for (int i = 0; i <arr ...
- 操作 html 的时候是使用 dom 方法还是字符串拼接?
比如一个列表里面有很多个 li,要给他们加上数据.但多少个 li 是不确定的,由后台数据确定.这时候,就要动态生成 html 内容了. 那么,这个过程, 是使用 += 方法把标签.数据进行一个个的字符 ...
- 字符串拼接 strcat ;数组和指针的区别
问题:字符串拼接 strcat 方法1: 开辟新空间,存放结果: #include <stdio.h> #include <stdlib.h> #include <str ...
- python 防止sql注入字符串拼接的正确用法
在使用pymysql模块时,在使用字符串拼接的注意事项错误用法1 sql='select * from where id="%d" and name="%s" ...
- JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别
String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 prototype 允许您向对象添加属性和方法 String 对象方法 方法 描述 ...
- NSString 用法大全。
一.NSString 创建字符串. NSString *astring = @"This is a String!"; 创建空字符串,给予赋值. NSString *astri ...
随机推荐
- VirtualBox NAT Host-only模式下,自动分配IP上网。
修改宿主机上,virtualbox自建虚拟网卡Host-Only 2. 因为我使用了两个适配器,所以这两个适配器的名字分别是ifcfg-eth0, ifcfg-eth1. ifcfg-eh0一般默认就 ...
- Eating Plan
Eating Plan 2019南昌G 模数为合数,所以只有约3000个数字不为0 记录一下不为0的数字位置 H[x]代表距离为x的连续段的数字和的最大值 处理出H[x] 再H[x] = max(H[ ...
- eclipse代码自动补全设置
1.说明 eclipse安装好了之后,在编辑框中输入某个英文字符,默认不自动弹出自动代码选择框,需要手动按下 Alt + / 或者输入的字符为 . 才弹出代码自动补全框.其实eclipse是可以设置 ...
- NOIP2009靶形数独(暴搜)
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z博士请教,Z博士拿出了他最近发明 ...
- java第二周小结
这是接触Java的第一周,了解这个语言的一些基础知识,下面是对这段时间重要知识点的汇总 一.Java是一种面向对象的语言 特点为:简洁高效.可移植性.适合分布式计算.健壮防患于未然的特性.多线程 ...
- c语言中static关键字用法详解
个人总结: 1.C不是面向对象的,在c中static修饰的变量或函数仅在当前文件中使用 2.C可以对局部变量使用static修饰(注意面向对象的java则不行),其放在全局区一直存在 概述static ...
- ES6数组的拓展
扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3 c ...
- await Vue.nextTick() 的含义分析
概述 今天看别人的单元测试代码的时候碰到了一段代码 await Vue.nextTick(),初看起来不是很懂,后来通过查资料弄懂了,记录下来,供以后开发时参考,相信对其他人也有用. await Vu ...
- Linux_LVM、RAID_RHEL7
目录 目录 LVM逻辑卷管理 把物理分区初始化为物理卷 创建卷组 建立逻辑卷 格式化 挂载 vg拓展操作 lv扩展操作 RAID RAID 类型 RAID0条带化 RAID1镜像 RAID5条带冗余 ...
- Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、LoadFromBinStream
Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream.LoadFromStream.SaveToBinStream.LoadF ...