为了账号安全,请及时绑定邮箱和手机立即绑定

NSString中子字符串出现的次数?

NSString中子字符串出现的次数?

守着一只汪 2019-10-09 15:08:23
如何获得NSString(例如,@"cake")在较大的NSString(例如,@"Cheesecake, apple cake, and cherry pie")中出现的次数?我需要在很多字符串上执行此操作,因此无论使用哪种方法都必须相对较快。谢谢!
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这未经测试,但应该是一个好的开始。


NSUInteger count = 0, length = [str length];

NSRange range = NSMakeRange(0, length); 

while(range.location != NSNotFound)

{

  range = [str rangeOfString: @"cake" options:0 range:range];

  if(range.location != NSNotFound)

  {

    range = NSMakeRange(range.location + range.length, length - (range.location + range.length));

    count++; 

  }

}


查看完整回答
反对 回复 2019-10-09
?
慕村225694

TA贡献1880条经验 获得超4个赞

在寻找比我更好的方法,但这是另一个例子:


NSString *find = @"cake";

NSString *text = @"Cheesecake, apple cake, and cherry pie";


NSInteger strCount = [text length] - [[text stringByReplacingOccurrencesOfString:find withString:@""] length];

strCount /= [find length];

我想知道哪个更有效。


我NSString为更好的用法做了一个分类:


// NSString+CountString.m


@interface NSString (CountString)

- (NSInteger)countOccurencesOfString:(NSString*)searchString;

@end


@implementation NSString (CountString)

- (NSInteger)countOccurencesOfString:(NSString*)searchString {

    NSInteger strCount = [self length] - [[self stringByReplacingOccurrencesOfString:searchString withString:@""] length];

    return strCount / [searchString length];

}

@end

只需通过以下方式调用即可:


[text countOccurencesOfString:find];

可选:您可以通过定义以下内容将其修改为不区分大小写的搜索方式 options:


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 805 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信