NSString和文本中出现的所有单词

时间:2015-02-27 14:37:24

标签: ios swift

我想知道是否有一种" iOS API方式"在每个出现的单词e.x。

中查找自定义NSString字符串范围
var text: NSString = "John is tall. John is 23."

当我使用时:

text.rangeOfString("John")

它只返回第一个。

3 个答案:

答案 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。