黑马程序员--Foundation框架之--NSString类以及它的子类NSMutableString类

继续看一下Foundation框架中的常用对象:NSString和NSMutableString

在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样。

一、NSString对象

在OC中,NSString对象是非常重要的一个对象,也是最基础的一个对象,是用来处理字符串的常用类。

下面来看一下NSString的一些方法的使用:

1、创建的方法

// 字符串的创建方式
NSString *string1 = @"hello";
NSLog(@"%@",string1);
string1 = [[NSString alloc] initWithString:@"hello1"];
NSLog(@"%@",string1);
//占位符,可以实现拼接字符串
//[string1 stringByAppendingFormat:<#(NSString *), ...#>]这个方法也是可以实现字符串拼接的
string1 = [[NSString alloc] initWithFormat:@"hello %@",string1];
NSLog(@"%@",string1);
//使用类方法创建字符串
string1 = [NSString stringWithString:@"hello1"];

这里用了四种方式去创建一个字符串,我们常用的方式一般是第一种,第二种是对象方法创建的,第三种是在创建字符串的时候可以实现字符串的拼接

第四种是使用类的方法创建的

2、比较字符串的值

//比较字符串的值
NSString *string2 = @"abcd";
NSString *string3 = @"8888";
BOOL isEquals = [string2 isEqualToString:string3];
if(isEquals){
}else{
}  

这个方法要和==方式判断相等的方式区分,==和isEqual方法一样,比较指针变量是否指向同一个对象的,但是在OC中对于字符串有一个特殊的地方,下面来看一下代码:

    NSString *string8 = @"abc";
    NSString *string9 = @"abc";
//string8和string9是局部变量,在栈中分配内存的
    if(string8 == string9){
        NSLog(@"string8 == string9");
    }else{
        NSLog(@"string8 != string9");
    }  

这里我们运行之后,发现用==判断也是相等的。但是在来看一下下面的代码:

    //下面的string11和string12还是在栈中分配内存的
    NSString *string11 = [[NSString alloc] initWithString:@"abc"];
    NSString *string12 = [[NSString alloc] initWithString:@"abc"];
    if(string11 == string12){
        NSLog(@"string11 == string12");
    }else{
        NSLog(@"string11 != string12");
    }  

我们发现用initWithString初始化方法创建的字符串他们的指针变量也是指向同一个对象的,

所以这里要记住了,NSString类中的 initWithString方法创建的字符串和NSString *str = @"demo"直接创建的方式是一样的,都是指向常量池中的一个对象。

所以使用==判断是相等的,其他的NSString类中创建字符串的方法就不一样了,比如下面的代码:

    //下面的string13和string14是在堆中分配内存的,所以string13和string14不相等了
    NSString *string13 = [[NSString alloc] initWithFormat:@"abc%@",@"def"];
    NSString *string14 = [[NSString alloc] initWithFormat:@"abc%@",@"def"];
    if(string13 == string14){
        NSLog(@"string13 == string14");
    }else{
        NSLog(@"string13 != string14");
    }  

用initWithFormat初始化方法创建出来的对象就不想等了。

所以要记住一点:initWithString初始化方法和直接创建字符串的效果一样,都是指向常量池中的NSString对象

3、比较两个字符串的大小方法

//比较两个字符串的大小
result = [string15 compare:string16];
if(result == NSOrderedAscending){
    //升序
}else if(result == NSOrderedDescending){
    //降序
}  

4、字符串的长度的方法

    // length方法
    NSString *string17 = @"abc";
    NSInteger len = [string17 length];
    NSLog(@"len=%ld",len);  

5、转化字符串的大小写方法

// 转成大写
NSString *string18 = @"aEc";
NSString *string19 = [string18 uppercaseString];
string19 = [string18 lowercaseString];
//首字符大写,其他的变成小写
[string18 capitalizedString];

6、数值转化的方法

//数值转化方法
NSString *string20 = @"3.14";
float value = [string20 floatValue];
string20 = @"1";
BOOL values = [string20 boolValue]; 

7、字符串的截取方法

//字符串的截取
NSString *string21 = @"abcdefg";
//从开始位置截取到下标为3的字串(不包括3)
NSString *stringnews = [string21 substringToIndex:3];
//从哪个index开始截取到尾部(包括3)
stringnews = [string21 substringFromIndex:3];
//截取1~(3+1)部分的字串
NSRange range = {1,3};
stringnews = [string21 substringWithRange:range];  

8、字符串的追加方法

//字符串的追加
NSString *string22 = @"Android";
NSString *stringnew = [string22 stringByAppendingString:@"IOS"];
stringnew = [string22 stringByAppendingFormat:@"%@",@"IOS"];  

这里需要注意的是,每次追加完一个字符串之后,是返回一个新的字符串,因为NSString是不可变类。

9、字符串的查找方法

//字符串的查找
NSString *string23 = @"www.iphonetrain.com/ios.html";
NSRange rang = [string23 rangeOfString:@"ios"];//返回一个范围
if(rang.location == NSNotFound){
    //没找到
}else{
    //找到了
}  

10、取出字符串中指定的char

//取出字符串中指定的char
NSString *string24 = @"abcdef";
unichar c = [string24 characterAtIndex:3];  

二、NSMutableString对象

上面介绍了NSString对象的一些常用方法,但是OC中的NSString是不可变的对象,所以这里在介绍一下一个与其对应的可变对象:NSMutableString

1、创建方法

NSMutableString类的创建方式和NSString的创建方式差不多

只是有一点需要注意,NSMutableString不能使用直接方式去创建,因为直接方式创建的字符串都是在常量池中,而常量池中的值都是不可变的

所以不能创建的,同时initWithString创建出来的字符串也是不在常量池中的

2、在字符串中插入一个字串

//在源字符串中指定的index中插入字符串,不会产生新的对象
[string1 insertString:@"可变" atIndex:0]; 

3、字符串的追加

//追加字符串,不会产生新的对象
[string1 appendString:@"可变"];

这个追加方法和NSString是不一样的,他不会产生一个字符串对象

4、删除字串

    //删除字符串中指定范围的字串内容
    NSMutableString *string2 = [NSMutableString stringWithString:@"hello"];
    NSRange range = {1,3};
    [string2 deleteCharactersInRange:range];  

5、替换字符串

//替换字符串内容
NSMutableString *string3 = [NSMutableString stringWithString:@"hello"];
NSRange ranges = [string3 rangeOfString:@"ll"];//先查找出需要替换字符串的范围
[string3 replaceCharactersInRange:ranges withString:@"ee"]; 

从上面的这些方法中,我们也可以看到NSMutableString类是可变的,因为只有可变字符串是有增删改查操作的

时间: 2024-07-30 03:13:44

黑马程序员--Foundation框架之--NSString类以及它的子类NSMutableString类的相关文章

黑马程序员--Foundation框架之--NSObject类

OC中的Foundation框架是系统提供的,他就相当于是系统的一套api,其内部有很多现有的类和功能提供给我们使用. 那么今天首先来介绍一下Foundation框架中的第一个类NSObject. // // Person.h // 13_NSObjectMethod // // Created by waterfoxjie 15-03-31. // Copyright (c) 2015年 waterfoxjie. All rights reserved. // #import <Foundat

黑马程序员--Foundation框架之--NSDirctionary类以及它的子类NSMutableDirctionary类

------IOS培训期待与您交流! ------- 今天来看一下Foundation框架中的NSDirctionary 类,NSMutableDirctionary类,OC中叫字典,字典是无序的,这个和NSArray不一样. 一.NSDirctionary类 1.创建方法 // 字典的创建 NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil]; NSArray *

黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类

今天我们继续来看一下Foundation框架中的NSArray类和 NSMutableArray类,NSArray类 是不可变的,NSMutableArray类是可变的. 一.NSArray类 NSArray中不可以存放基本数据类型,只能存放类的实例,如果需要将基本类型.结构体放入到数组中得话,需要通过NSNumber/NSValue进行数据的封装 同时不能在NSArray中存储nil // // main.m // 16_NSArray // // Created by waterfoxjie

黑马程序员-Foundation框架之数组和字典

一.Foundation框架简介 Foundation框架,顾名思义就是基础框架.基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础.OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类.要使用这个框架需要在引入头文件#import <Foundation/Foundation.h> 二.数组 NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组.下面通过代码来看一下它的一些基本的用法. 1 #import <Found

黑马程序员——Foundation框架的小总结

一.Foundation框架—结构体 一.基本知识 Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文件就可以了.即#import<foundation/foundation.h> 补充:core foundation框架相对底层,里面的代码几乎都是c语言的,而foundation中是OC的. 二.常用的结构体介绍及简单使用 常用的结构体: (一)NSRang的基本使用

黑马程序员--Foundation框架之--类其他常用的类:NSNumber,NSDate

------IOS培训期待与您交流! ------- Foundation的其他常用的类:NSNumber,NSDate 一.NSNumber 这个类主要是用来封装基本类型的,OC 中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去. 从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到. 1.封包和解包 // 创建NSNumber // 封包 NSNumber *intNumber = [NSNumber numberWithI

黑马程序员——Foundation框架常用类(NSDate)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 简介 NSDate:用于保存时间值的一个OC类,同时提供了一些方法来处理一些与时间相关的事.NSDate对象用来表示一个具体的时间点.NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体.NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示. NSDate 1.时间对象的基本使用 //第一种创建方式(里面存储

黑马程序员——Foundation框架常用类(NSNumber/NSValue)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 简介 引入:NSArray.NSSet.NSDictionary这些OC集合都只能存放OC对象,不能存放基本数据类型(int.char.double...).如果我们想将基本数据类型存到这些OC集合中,那么我们将基本数据类型(int.char.double...)包装成OC对象,那么就可以存到OC集合中.NSNumber可以将基本数据类型包装为OC对象. NSValue:用来存储一个C或者OC的

黑马程序员------Foundation框架中各种牛瓣数据类型

-----iOS培训.Android培训.Java培训,期待与您交流----- 一.NSRange.NSPoint\CGPoint. NSSize\CGSize.NSRect\CGRect (CGPint CGSize)结构体 1)NSRange NSRange表示一个范围,比如我们想求个@"I fall in love with Objective-C~";  这个字符串中"love"的表示范围就是位置从11开始,长度为4: NSRange的本质是一个结构体, 里