NSRange本身是个结构体,里面有两个属性location
(起始位置)和length
(长度),如下
NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
NSRange r;
r.location = loc;
r.length = len;
return r;
}
我们应用NSRange最多的地方就是字符串的截取与查找,例如:
NSString *str = @"Let's learn NSRange";
//创建方式一
NSRange range1 = {2,4};
//创建方式二
NSRange range2 = NSMakeRange(2, 5);
//截取字符串
NSLog(@"%@", [str substringWithRange:range1]);
NSLog(@"%@", [str substringWithRange:range2]);
//查找字符串
NSRange range3 = [str rangeOfString: @"le"];
NSLog(@"range:%@", NSStringFromRange(range3));
NSRange range4 = [str rangeOfString:@"go"];
NSLog(@"range:%@", NSStringFromRange(range4));
注意:1.当你进行字符串截取时,要注意字符串的长度,防止起始位置超过字符串长度或截取的长度超过字符串长度而导致越界闪退,这里苹果没有帮我们处理,需要我们自己判断。
2.在字符串查找时匹配的始终是第一个相符的字符串,然后返回第一个NSRange
。如果没有匹配到相符的字符串,这里苹果帮我们处理了,返回的是{9223372036854775807, 0}
,显然length
为0,前面一大串数字不需要管,它表示int64
的最大值。
3.当你使用查找字符串方法时,返回的始终是匹配到的第一个,但是如果原字符串里面有多个的相符的,而且你都想匹配出来,这个方法是做不到的。