【字符串】
【注】OC的程序,依托于基础类库Foundation.Foundation框架提供了很多官方类,其中有三个基础的数据结构。
【字符串】【数组】【字典】
知识点
1.NSString
2.NSMutableString
*****************************************************************************
========= 不可变字符串(NSString) =========
1.为什么需要NSString对象
答:在OC中创建字符串时,一般不使用C的方法,
因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,
在Cocoa中NSString集成的一些方法,可以很方便的操作字符串。
2.OC中定义字符串和C语言定义字符串
OC: NSString *str = @“aaa”;
C: char *c = “aaa”;
char c[20] = “hello”;
3.NSLog如何格式化NSString对象
OC语言:%@
C语言:%s
4.字符串创建
(1)定义字符串常量:
NSString *str = @"My name is xiaoming.";
//@“XXX”表示告诉编译器,创建一个字符串对象,返回值是对象的地址。
//只有官方类有这样的特权。
(2)通过一个字符串创建另一个字符串
NSString * str2 = [[NSString alloc] initWithString:str];
//NSString * str3 = [[NSString alloc] initWithString:@"我是一个字符串咿呀咿呀呦!"];
(3)将C字符串转换为OC字符串
NSString * str3 = [[NSString alloc] initWithUTF8String:"我是C字符串"];
(4)使用格式符创建字符串(拼接字符串)
NSString * str4 = [[NSString alloc] initWithFormat:@"我是万能拼接字符串%d %c %.2f", 1, ‘T‘, 3.14];
[注]每一个init方法,对应一个stringwith的类方法
(5)
NSString *str5 = [NSString stringWithString:str];
(6)
NSString *str6 = [NSString stringWithUTF8String:"qianfeng"];
(7)
NSString *str7 = [NSString stringWithFormat:@"我是万能拼接字符串%d %c %.2f", 1, ‘T‘, 3.14];
5.C语言字符串和NSString的转换
//1.把C字符串转化为OC字符串
str = [NSString stringWithUTF8String:cString];
//2.把OC字符串转化为C字符串
const char *c = [ocString UTF8String];
6.求字符串长度(字符个数)
//汉字的长度也为1
NSUInteger ret = [str length];
7.通过索引获取相应的字符
unichar c = [str characterAtIndex:i];
NSLog(@"%C", c);
//unicode 万国码,用更大的存储空间存储各国字符。
//mac下默认的编码格式称为UTF-8编码格式,是万国码的一个分支,理念是不同的字符,用不同的字节来存储。比如一个汉字占3字节,一个英语字符1字节,但都是一个字符。
8.字符串判断
1)判断两个字符串内容是否相同
//比较两个字符串内容是否相同(区分大小写)
BOOL isEq = [str2 isEqualToString:str3];
BOOL类型:YES是真(1),NO是假(0)
if (isEq == YES)
{
NSLog(@"内容相同");
}
else
{
NSLog(@"内容不相同");
}
2)判断两个字符串是否是同一个对象
if (str2 == str3)
{
NSLog(@"同一个对象");
}
else
{
NSLog(@"不是同一个对象");
}
9.字符串比较
NSComparisonResult result = [str1 compare:str2];
switch (result)
{
case NSOrderedAscending:
NSLog(@"升序");
break;
case NSOrderedSame:
NSLog(@"相同");
break;
case NSOrderedDescending:
NSLog(@"降序");
break;
default:
break;
}
10.转化为基本类型(int,float,bool,double,integer)
(1)int [str1 intValue]
(2)NSInteger [str1 integerValue]
(3)float [str1 floatValue]
(4)bool [str1 boolValue];
(5)double [str1 doubleValue]
(6)long long [str1 longLongValue]
11. 替换字符串
//B字符串替换A字符串(A被B替换)
[str1 stringByReplacingOccurrencesOfString:@“A” withString:@“B”];
12.查找子串的位置和范围
NSRange range = [str rangeOfString:@"粉刷"];
if (range.location == NSNotFound)
{
NSLog(@"没找到!");
}
else
{
NSLog(@"%lu %lu", range.location, range.length);
}
13.子串的提取
(1)从0开始到指定位置 之前
NSString * subStr1 = [str substringToIndex:5];
(2)从指定下标开始截取到最后
NSString * subStr2 = [str substringFromIndex:5];
(3)截取任何一部分
NSRange range = {1,5};
NSString * subStr3 = [str substringWithRange:range];
========= 可变字符串(NSMutableString) =========
NSMutableString 继承自 NSString
1.凡是NSString的方法,NSMutableString都能用
2.凡是传参需要传入NSString * 传入NSMutableString *也行
1.初始化可变字符串(必须初始化)
(1) NSMutableString *string = [[NSMutableString alloc] init];
(2) string = [NSMutableString string];
2.初始化带有字符串的可变字符串
string = [NSMutableString stringWithFormat:];
[NSMutableString stringWithString:];
3.重置字符串内容
[string setString:@"abbbb"];
4.根据指定的位置插入字符串
[string insertString:@“要插入的字符串” atIndex:下标];
5.追加一个部分字符串(在最后追加)
(1)[string appendString:@“要追加的字符串”];
(2)[string appendFormat:@"name=%@",@"xiaoming"];
6.删除字符串一部分
//找要删除的范围
NSRange range = [string rangeOfString:@"22222"];
//删除
[string deleteCharactersInRange:range];
7.修改字符串
[str replaceCharactersInRange:range withString:@"XXXXXXXXXXXXXXX"];
******************************************************************************
【类别/category】
———————————————————————————————————————
<1>.类别的写法:
@interface 类名 (类别名)
定义方法
@end
【注】一旦使用类别给已有的类增补方法,那么这个类的对象就可以使用这个方法
<2>.类别功能:
1. 可以给已有/ 系统原生的类增加方法
2.可以对类的方法进行分类管理,可以将类的实现分散到多个不同文件或多个不同框架中。
<3>使用类别需要注意的问题
1.类别中不能添加成员变量
2.使用类别增加的方法须导入类别头文件
3.父类类别中的方法,子类也可以用
<4>类扩展/匿名类别
当不想对外公开一些类的方法时,我们可以使用类扩展
1.类扩展的基本语法(写在在.m文件中)
@interface Person()//没有名字
- (void)song;
@end
@implementation Person
- (void)song{
}
@end
【注】类扩展中的声明和实现都放在.m文件中
2.类扩展的功能
1.可以实现私有方法
2.方便程序员调用不公开的方法
3.可以声明成员变量