文档章节

OC 基础类型 之 NSString

芳仔小脚丫
 芳仔小脚丫
发布于 2016/10/25 23:07
字数 1188
阅读 91
收藏 0

NSLog

NSLog 是介绍 OC 的打印方法,同 C 语言中的 print,使用 NSLog 输出结果,可以在 console 中看到输出信息.

void NSLog(NSString *format, ...);

NSRange

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

NSRange 是一个结构体,包含位置(location)和长度(length) 初始化方法:

NSRange NSMakeRange(NSUInteger loc, NSUInteger len)

比如表达从 位置1开始数4位

NSRange range = NSMakeRange(1, 4);

NSString

NSString 是最常见的基本类型之一,用来存储一段文本,NSString 是一个类簇,内部由多个类组成,具体实现时调用哪个类根据其真正的类型决定

实例化

实例化一个常量字符串

NSString *str = @"常量字符串";

当字符串内容需要变化时,使用 stringWithFormat: 方法来初始化,通过占位符如 %@, %c, %d等来替换需要替换的变量

NSString *userName = @"User1";
int age = 18;
NSString *userDescription = [NSString stringWithFormat:@"用户姓名:%@, 年龄:%d", userName, age];
NSLog(@"userDescription = %@", userDescription);

这里再次强调 + - 方法的区别:

  • + 方法可以直接通过类名调用;
  • - 方法必须通过该类的实例调用。

如前面的 stringWithFormat: 就是+方法,可以直接通过 NSString 调用,与它类似的 - 方法为 initWithFormat:,调用方式:

NSString *userDescription = [[NSString alloc] initWithFormat:@"用户姓名:%@, 年龄:%d", userName, age];

截取字串

文档中提供的方法

- (NSString *)substringFromIndex:(NSUInteger)from;
- (NSString *)substringToIndex:(NSUInteger)to;
- (NSString *)substringWithRange:(NSRange)range;    
NSString *string = @"hello iOS";
NSString *str1 = [string substringFromIndex:1];
NSString *str2 = [string substringToIndex:1];
NSLog(@"str1 = %@", str1);
NSLog(@"str2 = %@", str2);

index 是指 string 中的索引,从0开始,上面的 h index 是0,e index 是 1...

上面还有一个方法是 substringWithRange: ,参数是 NSRange 类型,前面介绍过,这里我们传刚刚的 range 值:

NSRange range = NSMakeRange(1, 4);
NSString *str3 = [string substringWithRange:range];
NSLog(@"str3 = %@", str3);

还有一种截取字串的方法,与 NSArray 有关,以某个字符切开,比如前面的 hello iOS,我们以中间的空格为节点,截取子串,这种方法使用得非常多,或是以,, :等,尤其是与后台进行数据传输时,经常会用到这种方法

NSArray *array = [string componentsSeparatedByString:@" "];
NSArray *array1 = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"array = %@\n narray1 = %@",array, array1);
    
NSString *stringHello = array.firstObject;

判断某个字符串中是否含有另一个字符串

- (BOOL)hasPrefix:(NSString *)str;
- (BOOL)hasSuffix:(NSString *)str;
- (BOOL)containsString:(NSString *)str NS_AVAILABLE(10_10, 8_0);
- (NSRange)rangeOfString:(NSString *)searchString;

比如判断某个字符串是否是一个网站,判断是否含有 http 前缀 ,是否含有 .com后缀

NSString *url =  @"http://xingren.com";
BOOL hasHttpPrefix = [url hasPrefix:@"http"];
BOOL hasComSuffix = [url hasSuffix:@".com"];

搜索字串

BOOL isXingren = [url containsString:@"xingren"];
BOOL isXingren = [url rangeOfString:@"xingren"].length == 0;

这里要注意 containsString 方法是 iOS 8以上 的方法,文档中有标注,NS_AVAILABLE(10_10, 8_0),即必须在 os 10.10 及以上,iOS8.0 及以上才可使用,在os 10.10 或 iOS 8 以下的设备 必须使用 rangeOfString 来辅助判断,我一般是判断 length 是否为0。

字符串的比较

字符串的比较最常用的是 isEqualToString:,判断是否相等。还有多种 compare: 方法,比较时一般是根据比较对象的 ASCII 码值进行比较:

示例:

NSString *string1 = @"123";
NSString *string2 = @"234";

BOOL isEqual = [string1 isEqualToString:string2];

    
NSComparisonResult result = [string1 compare:string2];
NSString *string3 = @"CAC";
NSString *string4 = @"aAC";
// 忽略大小写, options 还有多种值可选,可查看文档选择
NSComparisonResult result1 = [string1 compare:string2 options:NSCaseInsensitiveSearch];
// 忽略大小写,并只比较第一位字符
NSComparisonResult result2 = [string1 compare:string2 options:NSCaseInsensitiveSearch range:NSMakeRange(0, 1)];


NSMutableString

NSMutableString 是 NSString 的子类,是一个可变的字符串,可以对字符串进行增删改操作,既然是 NSString 的子类,即 它有 NSString 的一切特性,完全可以被作为一个 NSString 使用。

有一点需要注意,OC 中的 mutable 类属性声明都不能是 copy,否则就失去了mutable的特性,无法使用 mutable 相关的方法和属性,现在不理解没关系,先记着,有个印象,反正最后这些东西都是要重学一遍的

实例化

NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"hello"];
// initWithCapacity 指定了 string 的最大容量,即 string 长度最大只能为30
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:30];

[mutableString appendString:@"iOS"];
[mutableString appendFormat:@"%d",2016];
[mutableString insertString:@">" atIndex:0];

自己打印值查看 mutableString 的值有何变化

[mutableString deleteCharactersInRange:NSMakeRange(0, 1)];

[mutableString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"嘿"];

我只是列举了常用的方法,其他的方法没有使用场景会比较难说明,当这些方法无法满足需求时,查文档寻找有没有类似的方法可以满足需求。

新手和熟练工的区别最本质的区别 查文档 的能力,还有搜索,百度谷歌必应随便选一个,能解决问题就是好的,现在看的这些不懂完全没有关系,反正到后面你还是会重学一遍,Trust me

© 著作权归作者所有

芳仔小脚丫
粉丝 930
博文 83
码字总数 76301
作品 0
闵行
程序员
私信 提问
IOS语法 @property里的assign,copy,retain的区别

@property(nonatomic,copy)NSString* str; 这里的assign copy retain的区别: assign:这个是简单赋值,不更改引用索引计数(reference counting); copy:建立索引计数为一的对象,然后释放...

love丁小南
2014/04/20
765
0
[swift]-字符串和oc字符串的对比使用

swift中字符串和oc字符串的区别: > 1:swift字符串的类型是String,oc 字符串的类型是NSString > 2:swift字符串的写法是"123",oc字符串的写法是@"123" swfit中字符串的类型为什么是String ,它......

XJDomain
2016/07/31
47
0
Nesting介绍和基础方法

自己总结NSString的方法: NSString面对的对象可以看成是一堆字符串或者单独是字符也可以,其中可以包括汉字、字母、数字等内容的结合。NSString的对象输出时不论是字符还是字符串,统一用%...

指间-亦泛伤
2016/09/03
10
1
OC字符串

1.OC字符串 C语言中,字符和字符串都为常量。 OC中仍然可以使用C的字符串和字符,但其有专有的字符类,可以声明专有的字符串对象。OC的字符串,结尾不考虑尾0,查字符串位置时,起始为0,这和...

飞奔的土豆
2012/12/10
0
0
iOS-Foundation框架中常用的类

Foundation框架中最常用的类。 Foundation框架中最我们经常用的类大致有NSString、NSArray、NSDictionary等等,虽然不需要将每一个类中提供了什么方法都记下来,但是需要做到心中有数,知道F...

xx_cc
2016/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部