Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSString和文本中出现的所有单词_Ios_Swift - Fatal编程技术网

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

Ios NSString和文本中出现的所有单词,ios,swift,Ios,Swift,我想知道是否有一种“iosapi方法”可以在每次出现的单词e.x的自定义NSString范围内找到 var text: NSString = "John is tall. John is 23." 当我使用: text.rangeOfString("John") 它将只返回第一个。我认为NSString中没有任何东西可以这样做。 每次找到“John”并将范围添加到NSMutableArray时,尝试循环剪裁字符串。有几种方法,您可以使用: 射程 正则表达式 例如,对于正则表达式: va

我想知道是否有一种“iosapi方法”可以在每次出现的单词e.x的自定义NSString范围内找到

var text: NSString = "John is tall. John is 23."
当我使用:

text.rangeOfString("John")

它将只返回第一个。

我认为NSString中没有任何东西可以这样做。
每次找到“John”并将范围添加到NSMutableArray时,尝试循环剪裁字符串。

有几种方法,您可以使用:

  • 射程
  • 正则表达式
例如,对于正则表达式:

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”将返回相同的值)。

这里是NSString上的一个简单扩展,可以让您以更简单、更快捷的方式查找子字符串的出现:

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)

享受吧

“它将只返回第一个。”-Apple Doku:
rangeOfString:查找并返回接收器中给定字符串第一次出现的范围。
为什么会被否决?这是一个合法的问题。你为什么要使用NSString?@LeonardoSavioDabus在Swift应用程序中使用
NSString
没有错。没有必要剪裁字符串。只需将新范围传递给
rangeOfString:options:range:
。这是一个非常糟糕的答案。
NSString
中有许多选项可用于查找子字符串或正则表达式匹配项。