IOS-OC-NSString(字符串)

字符串申明和赋值①至④

①  NSString *str1 = @"xiaoqiang";

// //每个init方法,对应一个stringWith的类方法

② NSString *str1 = [[NSString alloc] initWithFormat:@"%d,%c,%@",1,'q',@""];
//用类方法写法是:NSString * str2 = [NSString stringWithFormat:str1];下面雷同
//用了string这个方法,NSString后面就不需要alloc

③//将C字符串,转换成OC字符串

NSString * str3 = [[NSString alloc]initWithUTF8String:"aoe,iuv"];

④//用一个字符串,创建另一个字符串

NSString * str2 = [[NSString alloc] initWithString:str1];

⑤//使用格式符,创建字符串 这个就是②的方法

NSString * str4 = [[NSString alloc] initWithFormat:@"hello %d %c %.2f", 5, 'A', 3.1415926];

//字符串转数字

int ret = [str1 intValue];//输出结果12345


long long ret2 = [str1 longLongValue];//输出结果12345

double ret3 = [str1 doubleValue];//输出结果12345.600000


NSInteger ret4 = [str1 integerValue];//输出结果12345
NSLog(@"%d", ret);

// 1.int或其他数据类型转成NSString

    NSString *str = [NSString stringWithFormat:@"%d",10];
    NSLog(@"%@",str);
   输出为10

//将C字符串,转换成OC字符串

NSString * str3 = [[NSString alloc] initWithUTF8String:"aoe,iuv"];

//OC字符串转C字符串
//注意 *p这个指针

        const char * p = [@"aoeiuv" UTF8String];
        NSLog(@"%s", p);

二.字符串操作方法

1.返回字符串的长度

NSUInteger len = [str length];

2.返回单个字符

unichar c = [str characterAtIndex:3];

3.比较两个字符串的大小关系

①
BOOL ret = [str1 isEqualToString:str2];
②
NSComparisonResult ret2 = [str1 compare:str2];
//    NSOrderedAscending = -1L,升序//-不是表示负号
//    NSOrderedSame,  相等
//    NSOrderedDescending 降序

4.查找子串的位置和范围

NSRange range = [A rangeOfString:@“B”];
//如果字符串A的部分和字符串B整体相同,则称B为A的子串,A为B的父串
//如父串@"1234567890" 子串@"345"
//父串的值不会变    还是“123456789”

range.location 表示起点   range.length表示范围长度  NSNotFound表示不存在

5.子串的提取

①种
 NSString * subStr1 = [str substringToIndex:5];
//从父串第0个字符提取到第5个字符,不包括第5个(0--4),生成新字符串,创建对象,返回新字符串地址。

②种
NSString * subStr2 = [str substringFromIndex:5];
//从第5个字符开始提取到字符串尾,包括第5个,生成新字符串,返回地址。


③种
NSRange range = {5, 4};
        //范围是起点和长度而非起点和终点
NSString * subStr3 = [str substringWithRange:range];
        //根据制定范围,提取子串,生成新串,返回地址

6.字符串的截取

第一种:
格式:类型+*+变量名 = 【字符串  componentsSeparatedByCharactersInSet:@“写上截取的字符” 】
第二种:这个也是比较,和第一个不同,只有字符串有@“,” 就会截取,或者只要有@“/”,也会截取,只要有@“,/”也会截取;
易错点   截取之后有没有空号
下面这个例子
打印出来的结果是: “”, “1”, “1”, “5”, “2” “”;  前后都有空格;
NSString *str1 = @"-1-1+5-2-“;
 NSMutableArray * arrNum = [NSMutableArray arrayWithArray:[str1 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+-"]]];
        NSLog(@"%@",arrNum);


NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \n"]];


// array 表示的是数组  截取之后是一个一个字符串放在数组里面 
 NSArray *array = [str1 componentsSeparatedByString:@" "];
    for (id rr in array) {
        NSLog(@"%@",rr);
    }
NSString *str = @"EXO,男%18612598888,演员,16,[email protected],北京";

字符串的拼接

字符串拼接只能是从第一个字符之后进行拼接
1:将string字符串转换为array数组
 NSArray  *array = [Str componentsSeparatedByString:@","];
2:将array数组转换为string字符串


 NSString *tempString = [mutableArray componentsJoinedByString:@","];--分隔符
NSString *str = 这里必须是数组 componentsJoinedByString:@"$"];

可变字符串的一些特殊方法

 NSMutableString * str = [[NSMutableString alloc] init];·

//创建空字符串 @"" 字符串对象存在,但是里面有0个字符
①重置字符串内容
//重置就是把原来的字符串覆盖

[str setString:@"0123456789"];
        NSLog(@"%@",str); //输出结果0123456789
[str setString:@"XXXXXXXX"];
        NSLog(@"%@",str);//输出结果XXXXXXXX

②从字符串最后 拼接

第一种写法
[str setString:@"XXXXXXXX"];
[str appendString:@"9876543210"];
NSLog(@"%@",str);
//输出结果XXXXXXXX9876543210

第二种写法
[str appendFormat:@"%d %c %.2f", 34, 'T', 2.34];
NSLog(@"%@",str);
//输出结果XXXXXXXX987654321034 T 2.34

字符串的一些特殊方法

大写转小写

NSString *str = [@“ADD”lowercaseString];

小写转大写

NSString *str1 = [@“dd”,uppercaseString];

把首字母转写成大写

NSString *str2 = [@“adff”,capitalizedString];

判断字符串是不是以这个字符串开头

[@“hi,nihao”,hasprefix:@“hi”];

判断字符串是不是以这个字符串结尾

[@“hi,nihao”hasSuffix:@“nihao”];

从字符串的末尾进行拼接

第一种:
[strM appendString: @“sdafd”];
第二种:
[strM appendFormat:@“%d——%@”,2,@“小强”];

从指定字符串的某个位置进行添加             如果放入数组中 元素自动往后移动;
[strM insertString:@“广告”atIndex:0];

删除某个位置和范围的字符

NSRange range = {1,3};
[str  deleteCharactersINRange: range];

替换某个位置和范围的字符
[str replaceCharacterInRange:range  withString:@“天明”];

增  删  改 查

二 可变字符串的创键

// 可变字符串的创建方式
// 1.
NSMutableString *strM = [[NSMutableString alloc] init];
// 可变字符串特有的方法
[strM setString:@"秦时明月"];

// 2.
NSMutableString *strM1 = [[NSMutableString alloc] initWithString:strM];
NSLog(@"%@",strM1);

// 3.
NSMutableString *strM2 = [NSMutableString stringWithUTF8String:"芈月传"];

2.可变字符串的常用方法
NSMutableString *strM2 = [NSMutableString stringWithUTF8String:"芈月传"];

// 从字符串后面开始拼接
[strM2 appendString:@"第一集"];
输出打印结果为:芈月传第一集

//从字符串后面开始拼接 可以添加拼接的字符串
[strM2 appendFormat:@"%d--%@",3,@"呵呵"];
NSLog(@"%@",strM2);
输出打印结果为:芈月传第一集3--呵呵

// 在我们索引之前的位置添加
[strM2 insertString:@"广告" atIndex:0];
NSLog(@"%@",strM2);

输出打印结果为:广告芈月传第一集3--呵呵

// 删除某个位置和范围的字符
NSRange range = {1,3};
[strM2 deleteCharactersInRange:range];
NSLog(@"%@",strM2);

输出打印结果为:广传第一集3--呵呵

// 替换某个位置和范围的字符
[strM2 replaceCharactersInRange:range withString:@"天明"];
NSLog(@"%@",strM2);

输出打印结果为:广天明集3--呵呵

字符串总结:

Foundation类库,提供了三个基础的数据结构,是三个类。
【字符串】 【数组】 【字典】
NSString对象是不可修改的。 (不可变字符串)

一:不可变字符串:(NSString)
字符串的申明

①:对象的申明(初始化):
//创建一个对象 赋给 str1 是一个地址
NSString * str1 = @“我是小强”;

②:字符串的拼接
//使用initWithFormat 函数来进行
比如要在钱枫的钱字前面加数字 再钱和枫字中间加一个字符,再枫字后加一个字符串或者对象

格式: NSString *+名称 = [[NSString alloc] initWithFormat:@"%d钱%c枫 %@",2,'B',@"”];//注意加一个转对象符号。

然后打印出来
NSLog(@"%@",str2);


1.c的字符串转化为oc字符串
利用函数 initWithUTF8String
格式

这是再输入的是数字的情况下
//将数字oc数字转换成C数字
double num1 = [[NSString stringWithUTF8String:sum1]doubleValue];

见 1216代码 下午课堂练习文档

这是中英文情况下
NSString *str3 = [[NSString alloc] initWithUTF8String:"铅封"];
NSLog(@“%@“, str3);
2.oc字符转化成c字符
const char * p = [@"aoeiuv" UTF8String];
NSLog(@"%s", p);

stringWithUTF8String
//这个函数后面的字符串不用加“@”
④ 用一个字符串创建另外一个字符串
使用函数initWithString来
格式:
1:首先定义一个指针变量(NSString*类型)并赋值
NSString *+赋值过去的指针变量=“字符串”;

NSString *被创建的指针变量 = [[NSString alloc] initWithString:赋值过去的指针变量];

⑤3种类方法把c字符串转变成oc字符串的方法

1.首先定义一个指针变量(NSString*类型)并赋值

NSString *+赋值过去的指针变量=[NSString stringWithFormat:“字符串”];
方法一:
NSString *str22 = [NSString stringWithFormat:@"少年郎"];
或者
NSString * str7 = [NSString stringWithFormat:@"%d %c %s", 123, 'T', "678"];

方法二:
NSString *str33 = [NSString stringWithUTF8String:"我给你讲"];

方法三:
NSString *str44 = [NSString stringWithString:str1];

二:字符串操作方法

  1. 返回字符串的长度
    借用函数 :NSUInteger

格式 NSUInteger + 变量名 = [指针变量名 变量名 ];
例子:
返回的值为7;
NSString *str = @"1234567";
//注释:NSInteger length( 变量名) = [str length];
NSInteger length = [str length];
NSLog(@"%d",length);

2.返回单个字符
借用函数 :characterAtIndex(Index从0开始算起)
格式 unichar 自己随便定义一个变量 = [ 指针变量名 characterAtIndex : 要返回值所在的位置(从0开始算起)]
例子

NSString *str = @"1234567";
unichar c = [str characterAtIndex:5];
NSLog(@"%c",c);

  1. 字符串的比较

借用函数NSComparisonResult
方法一:
格式 NSComparisonResult 自己定义一个变量名 = [被比较的指针变量名 compare:要比较的指针变量名];

例子
//比较两个字符串的大小关系
NSString *str = @"1234567”;(被比较的变量名)
NSString *str2 = @"2345678”;(要比较的变量名)
NSComparisonResult rect = [str compare:str2];
比较方法 :str2与str比较 则如下定义

// NSOrderedAscending = -1L,升序
// NSOrderedSame, 相等
// NSOrderedDescending 降序

if (rect == NSOrderedAscending) {
NSLog(@"右边大");
}else if (rect == NSOrderedSame){
NSLog(@"相等");
}else if (rect == NSOrderedDescending)
{
NSLog(@"左边大");
}

借用BOOL // Yes 表示真(1) NO表示假(0)
方法二:
BOOL 自己定义一个变量名 = [被比较的指针变量名 isEqualToString:要比较的指针变量名];

 NSString * str1 = @"abc";
NSString * str2 = @"abd";

//比较两个字符串是否相等
BOOL ret = [str1 isEqualToString:str2];
if (ret == YES) {
    NSLog(@"两字符串相等");
}else{
    NSLog(@"两字符串不等");
}

字符串的一些方法:
// 1. 把大写转成小写
NSString *engW = [@"ABCD" lowercaseString];

    // 2. 小写转成大写

NSString *engG = [@"cdesf" uppercaseString];

    // 3.转成首字母大写

NSString *engF = [@"fadsfadsfdsa" capitalizedString];

    // 判断字符串是不是以某个字符串开头
    [@"hello,nihao" hasPrefix:@"hello"];
    
    // 判断字符串是不是以某个字符串结尾
    [@"hello,nihao" hasSuffix:@"nihao"];

5.子串的提取
有三种形式

第一种

借用函数substringToIndex (开区间)(0-4)

格式:
NSString * 自己定义变量名 = [被提取的指针变量名(str) substringToIndex:5(提取的个数)];

从第0个字符提取到你所要提取的字符为止
例子:
NSString * str(被提取的指针变量名) = @"0123456789";
NSString * subStr1 = [str(被提取的指针变量名) substringToIndex:5(提取的个数)];
输出结果为(0-4)即到第5个个字符
sub
第二种

从自己选定的第几个字符提取 直到最后

借用函数substringFromIndex 【闭区间】
格式:
NSString * 自己定义变量名 = [被提取的指针变量名(str) substringFromIndex:从哪个字符开始提取直至末尾比如从第一个字符开始则这里写0];

NSString *str = @"渴了喝露水,饿了吃蚂蚱";
// 从第二个字符开始截取 直到最后(喝露水,饿了吃蚂蚱)
NSString *sub2 = [str substringFromIndex:2];
NSLog(@"%@\n",sub2);
输出结果为:喝露水,饿了吃蚂蚱

第三种

借用函数
substringWithRange
格式
先定义一个范围 自己定义的起点到指定的字长为止;

NSRange range = { 起点,长度};
NSString *自己定义变量名 = [str substringWithRange:range];

四. 可变字符串(NSMutableString)
1.凡是NSString的方法,NSMutableString都能用
2.凡是传参需要传入NSString * 传入NSMutableString *也行
//禁止用下述方法创建可变字符串 @"我是不可变字符串" 这句表达式返回一个不可以变字符串的地址
//NSMutableString * str3 = @"我是不可变字符串";

格式
定义格式
NSMutableString * str1 = [[NSMutableString alloc] initWithString:@"hello world!”];//注意加@
NSMutableString * str2 =[NSMutableString stringWithUTF8String:"123456”];

一:字符串的截取
借用函数componentsSeparatedByCharactersInSet

格式:类型+*+变量名 = 【字符串 componentsSeparatedByCharactersInSet:@“写上截取的字符” 】

格式二
NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \n"]];

// 字符串的截取
NSString *str = @"a b c";
// array 表示的是数组 截取之后是一个一个字符串放在数组里面
NSArray *array = [str componentsSeparatedByString:@" "];
for (id rr in array) {
NSLog(@"%@",rr);
}
二 : 字符串的拼接
格式
NSString *指针变量名 = [被拼接字符串的指针变量名(字符串本身也可以) componentsJoinedByString:@"$"];
例子:
NSString *str = @"EXO,男%18612598888,演员,16,[email protected],北京";

NSString *strP = @"EXO,男%18612598888,演员,16,[email protected],北京"componentsJoinedByString:@"$"];

NSLog(@"%@",strP);
输出打印的结果为
EXO演员[email protected]$北京

三 字符串的转换
// ******* 字符串和基本数据类型的转换********
// 1.int转成NSString
NSString *str = [NSString stringWithFormat:@"%d",10];
NSLog(@"%@",str);
输出为10

// 2. NSString转成int
int strNum = [str intValue];
NSLog(@"%d",strNum);

输出为10

四 oc字符串的位置和范围查找

格式
range.location 表示起点 range.length表示范围长度
if (range.location == NSNotFound) {
NSLog(@"不存在");
}else
{
NSLog(@"存在");
NSLog(@"%lu---%lu",range.location,range.length);
}

// *******查找字符串的位置和范围********
NSString *strC = @"北京欢迎你";
NSRange range = [strC rangeOfString:@"欢迎"];

if (range.location == NSNotFound) {
    NSLog(@"不存在");
}else
{
    NSLog(@"存在");
    NSLog(@"%lu---%lu",range.location,range.length);
}

// 判断是不是字符串
使用判断方法 isKindOfClass
例如
BOOL ret = [@“xiaoqiang” isKindOfClass]

相同点:

都是NSObject的比较Class的方法.

不同点:

isKindOfClass:确定一个对象是否是一个类的成员,或者是派生自该类的成员.

isMemberOfClass:确定一个对象是否是当前类的成员.

isKindOfClass,isMemberOfClass,isSubclassOfClass的区别

今天突然被问到isKindOfClass,isMemberOfClass的区别,瞬间懵了,虽然是知道根据类的名称判断是否属于这个类,但没有具体的了解,总归问到的时候不能回答 ”用的时候看心情吧0.0“,就区别了一下,其实也很简单

 以下的类层次是这样的,BaseZombie是所有僵尸类的基类,ZombieType1是继承于BaseZombie的一个类,textType是继承于ZomboeType1的类
@interface BaseZombie : NSObject
@interface ZombieType1 : BaseZombie
@interface Tet5extType1 : ZombieType1
 首先看一下开发文档中描述isKindOfClass

- (BOOL)isKindOfClass:(Class)aClass
Description 
Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. (required)

//意思是返回一个BOOL类型的值,表示调用该方法的类 是否是 参数类 或者 继承于参数类

通过程序来反馈下结果会更加的明显,

TextType1 * text1 = [[TextType1 alloc]init];//初始化一个测试子类
        
BOOL b1 = [text1 isKindOfClass:[TextType1 class]];//YES
BOOL b2 = [text1 isKindOfClass:[ZombieType1 class]];//YES
  接下来看一下开发文档中的描述isMemberOfClass
- (BOOL)isMemberOfClass:(Class)aClass
Description 
Returns a Boolean value that indicates whether the receiver is an instance of a given class. (required)

//意思是返回一个BOOL类型的值,表示调用该方法的类 是否是 参数类

通过程序反馈结果如下

BOOL b3 = [text1 isMemberOfClass:[TextType1 class]];//YES
BOOL b4 = [text1 isMemberOfClass:[ZombieType1 class]];//NO 父类不被承认
最后一个是开发文档中的isSubclassOfClass
//注意这是一个类方法
  • (BOOL)isSubclassOfClass:(Class)aClass
    Description
    Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.
//意思是返回一个BOOL类型的值,表示调用该方法的类 是不是 参数类的一个子类 或者 是这个类的本身

程序反馈如下

BOOL b5 = [textType1 isSubclassOfClass:[ZombieType1 class]];//YES
BOOL b6 = [textType1 isSubclassOfClass:[textType1 class]];//YES
BOOL b7 = [textType1 isSubclassOfClass:[NSString class]];//NO

综上看来,isSubclassOfClass和isKindOfClass的作用基本上是一致的,只不过一个是类方法,一个是对象方法。
isMemberOfClass 筛选条件更为苛刻,只有当类型完全匹配的时候才会返回YES。

你可能感兴趣的:(IOS-OC-NSString(字符串))