我想知道是否有一种" iOS API方式"在每个出现的单词e.x。
中查找自定义NSString字符串范围var text: NSString = "John is tall. John is 23."
当我使用时:
text.rangeOfString("John")
它只返回第一个。
答案 0 :(得分:2)
有几种方法可以这样做,你可以用:
例如,使用正则表达式:
var str = "John is tall. John is 23."
var length = countElements(str)
var regex : NSRegularExpression = NSRegularExpression(pattern: "John", options: NSRegularExpressionOptions.CaseInsensitive, error: nil)!
var nbMatch : Int = regex.numberOfMatchesInString(str, options: NSMatchingOptions.allZeros, range: NSMakeRange(0, length))
println(nbMatch)
请注意,您可以指定选项,例如,它不区分大小写(因此“John”或“john”将返回相同的内容)。
答案 1 :(得分:1)
这是NSString的一个简单扩展,它允许您以更简单,更Swifty的方式查找子字符串的出现:
extension NSString {
func findAllOccurrencesOfString(string: NSString, options: NSStringCompareOptions, _ callback: (NSRange) -> Void) {
var searchRange = NSMakeRange(0, self.length)
while true {
let range = self.rangeOfString(string, options: options, range: searchRange)
if range.location == NSNotFound {
break
}
callback(range)
searchRange = NSMakeRange(range.location + range.length, self.length - (range.location + range.length))
}
}
}
您可以将其用作:
let s: NSString = "John is tall. John is 23. Where is John"
s.findAllOccurrencesOfString("John", options: NSStringCompareOptions.allZeros) { (range) -> Void in
println("Found \(s.substringWithRange(range)) at \(range)")
}
这导致:
Found John at (0,4)
Found John at (14,4)
Found John at (35,4)
享受!
答案 2 :(得分:-1)
我认为NSString中没有任何内容可以做到这一点。 每次尝试循环剪切字符串" John"找到并将范围添加到NSMutableArray。