在某OC字符串中,搜索指定的某字符串:-rangeOfString:

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/

点赞(72) 打赏

评论列表 共有 2 条评论

跑到坟场去吓鬼 1年前 回复TA

每天送你888,顺心顺意天天发;每天送你999,前前后后都富有;每天送你555,日日上班不辛苦;每天送你333,无论做啥都过关!

无限╭嚣张つ 1年前 回复TA

祝自己出入平安,龙马精神

立即
投稿
发表
评论
返回
顶部