NSString是OC中最常用的字符串类型之一,而在NSString的使用过程中,有时我们需要在字符串中搜索指定的某个字符串,此时就需要用到NSString的方法-rangeOfString:。本文将详细介绍该方法的使用方法以及一些示例。
一、方法介绍
- (NSRange)rangeOfString:(NSString *)searchString;
方法作用:在字符串中查找指定的子串,返回其所在范围的数据。
入参:
searchString:要查找的字符串。
返回值:NSRange类型的范围数据。
NSRange结构体的定义如下:
typedef struct _NSRange {
NSUInteger location; // 起始位置
NSUInteger length; // 长度
} NSRange;
该结构体用于表示指定字符串中一个子串的起始位置和长度。
二、方法使用
示例代码:
NSString *str = @"Hello, world!";
NSRange range = [str rangeOfString:@"world"];
if (range.location != NSNotFound) {
NSLog(@"找到了,起始位置:%lu,长度:%lu", range.location, range.length);
} else {
NSLog(@"没找到");
}
输出结果:
找到了,起始位置:7,长度:5
解析说明:
上述代码首先创建了一个字符串变量str,并用该变量调用了rangeOfString:方法。方法的入参为@"world",即要查找的字符串,方法会返回查找到的子串所在的范围。由于"world"字符串确实存在于"Hello, world!"字符串中,所以查找成功,range变量的值为{7, 5},即"world"子串起始位置为7,长度为5。然后程序就会进入if分支里面执行相关语句,输出了子串的位置信息。
如果要查找的字符串不存在于原字符串中,range变量将会是{NSNotFound, 0},表示查找失败,此时会进入else分支中执行相关语句,输出"没找到"的提示信息。
三、使用注意点
1.方法区分大小写
当使用rangeOfString:方法查找子串时,它是区分大小写的,即如果子串的大小写与原字符串不同,将会查找失败。解决方法是将原字符串和要查找的子串都转为大写或小写字母,再进行查找。
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"World";
NSRange range = [str rangeOfString:[subStr lowercaseString]];
if (range.location != NSNotFound) {
NSLog(@"找到了,起始位置:%lu,长度:%lu", range.location, range.length);
} else {
NSLog(@"没找到");
}
输出结果:
找到了,起始位置:7,长度:5
2.方法可以查找空字符串
rangeOfString:方法可以查找空字符串(@”“),如果查找到空字符串,它会返回原字符串的位置和长度。
示例代码:
NSString *str = @"Hello, world!";
NSRange range = [str rangeOfString:@""];
if (range.location != NSNotFound) {
NSLog(@"找到了,起始位置:%lu,长度:%lu", range.location, range.length);
} else {
NSLog(@"没找到");
}
输出结果:
找到了,起始位置:0,长度:0
3.多次查找
可以在一个字符串中多次查找某个子串,即在一个循环里多次调用rangeOfString:方法,每次都查找该子串的下一个位置。
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"o";
NSUInteger index = 0;
NSRange range;
while ((range = [str rangeOfString:subStr options:0 range:NSMakeRange(index, str.length - index)]).location != NSNotFound) {
NSLog(@"找到了,位置:%lu", range.location);
index = range.location + range.length;
}
输出结果:
找到了,位置:4
找到了,位置:7
4.range参数的计算
在查找字符串时,可以通过NSMakeRange函数创建NSRange类型的range参数来限定子串的查找范围,NSMakeRange函数的参数如下:
NSMakeRange(NSUInteger loc, NSUInteger len)
其中,loc为起始位置,len为查找长度。例如,如果我们只想查找“world”之前的部分:
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"l";
NSRange range = [str rangeOfString:subStr options:0 range:NSMakeRange(0, [str rangeOfString:@"world"].location)];
if (range.location != NSNotFound) {
NSLog(@"找到了,位置:%lu", range.location);
} else {
NSLog(@"没找到");
}
输出结果:
找到了,位置:2
这里range参数的起始位置为0,长度为"world"子串的起始位置,即在"Hello, world!"字符串的前半部分中查找子串,这样就可以避免查找"world"子串之后的内容了。
四、方法示例
接下来,本文将给出rangeOfString:方法的一些实际应用示例,希望读者通过这些例子能更好地掌握该方法的使用。
1.判断字符串是否包含指定的前缀或后缀
可以利用rangeOfString:方法来判断一个字符串是否包含指定的前缀或后缀。
示例代码:
NSString *str = @"http://www.baidu.com";
BOOL hasHttpPrefix = [str rangeOfString:@"http://"].location == 0;
BOOL hasComSuffix = [str rangeOfString:@".com" options:NSBackwardsSearch].location == str.length - 4;
NSLog(@"%@ 包含 http:// 前缀:%d", str, hasHttpPrefix);
NSLog(@"%@ 包含 .com 后缀:%d", str, hasComSuffix);
输出结果:
http://www.baidu.com 包含 http:// 前缀:1
http://www.baidu.com 包含 .com 后缀:1
2.查找字符串中某个子串出现的次数
可以使用循环结合rangeOfString:方法在字符串中查找某个子串出现的次数。
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"l";
NSUInteger count = 0;
NSUInteger index = 0;
NSRange range;
while ((range = [str rangeOfString:subStr options:0 range:NSMakeRange(index, str.length - index)]).location != NSNotFound) {
count++;
index = range.location + range.length;
}
NSLog(@"%@ 中包含 %@ %lu 次", str, subStr, count);
输出结果:
Hello, world! 中包含 l 3 次
3.替换字符串中的某个子串
可以利用replaceOccurrencesOfString:withString:options:range:方法在一个字符串中替换某个子串。
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"world";
NSString *newStr = [str stringByReplacingOccurrencesOfString:subStr withString:@"QQ"];
NSLog(@"原始字符串:%@", str);
NSLog(@"替换后字符串:%@", newStr);
输出结果:
原始字符串:Hello, world!
替换后字符串:Hello, QQ!
4.查找字符串中最后一个子串出现的位置
可以使用rangeOfString:方法的options参数来指定向后查找,这里使用NSBackwardsSearch选项可以查找字符串中最后一个子串出现的位置。
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"o";
NSRange range = [str rangeOfString:subStr options:NSBackwardsSearch];
if (range.location != NSNotFound) {
NSLog(@"%@ 中最后一个 %@ 出现的位置:%lu", str, subStr, range.location);
} else {
NSLog(@"%@ 中没有 %@ 这个子串", str, subStr);
}
输出结果:
Hello, world! 中最后一个 o 出现的位置:7
5.查找字符串中某个子串之后的内容
可以使用rangeOfString:方法的range参数来指定查找的起始位置和长度,从而获取字符串中某个子串之后的内容。
示例代码:
NSString *str = @"Hello, world!";
NSString *subStr = @"o";
NSUInteger index = [str rangeOfString:subStr].location + subStr.length; // 获取目标子串结束位置
NSString *postStr = [str substringWithRange:NSMakeRange(index, str.length - index)];
NSLog(@"%@ 中 %@ 之后的内容为:%@", str, subStr, postStr);
输出结果:
Hello, world! 中 o 之后的内容为:rld!
免责声明:本文所述内容仅供参考,使用范例不能代表可行性,具体使用时需结合自身业务需求进行实际操作。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
每天送你888,顺心顺意天天发;每天送你999,前前后后都富有;每天送你555,日日上班不辛苦;每天送你333,无论做啥都过关!
祝自己出入平安,龙马精神