OC 基础类型 之 NSString

原创
2016/10/25 23:07
阅读数 263

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

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部