在 Objective C 中是否可以同时搜索 NSString 中的多个不同字符串?
例如,我想在一个很长的字符串中搜索所有出现的字符串“good”、“great”、“awesome”、“incredible”、“fantastic”和“brilliant”。
我的第一个想法是使用 NSString:rangeOfString
: 并循环多次(每个字符串一次),但令我吃惊的是,对于较长的字符串集,这可能会变得低效且缓慢。
是否有像这样的内置方法来搜索多个字符串,还是我应该创建自己的方法?
编辑:结果出来了!
找时间进行基准测试后,我发现 RegEx 方法确实比循环 rangeInString
方法慢(慢 2 倍以上)。数字如下:
包含150,000 个单词(~1103,500 个字符)和20 个匹配词 的列表,存在5412 个匹配项
NSString:rangeInString search = 231.077ms
正则表达式搜索 = 530.113ms
最佳答案
it strikes me that with longer sets of strings, this may become inefficient and slow.
那么,您是否对其进行了基准测试?如果不是,那么你没有权利判断它是“低效”和“缓慢”。过早的优化是邪恶的。只需坚持使用那些漂亮而简单的 for 循环和 - [NSString rangeOfString:]
方法即可。
但是:要真正回答您的问题,不可能避免手动循环。如果您将 NSRegularExpression
与 good|great|awesome
之类的正则表达式一起使用,那么您可以一次找到所有出现的地方。 不过,使用正则表达式可能比简单的字符串搜索慢。
关于iphone - 在 NSString 中搜索多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18385500/