一尘不染

迅速查找所有出现的子串

swift

我在这里有Swift的String类的扩展,该扩展返回给定子字符串的第一个字母的索引。

谁能帮我做到这一点,这样它将返回所有出现的数组,而不仅仅是第一个出现的数组?

谢谢。

extension String {
    func indexOf(string : String) -> Int {
        var index = -1
        if let range = self.range(of : string) {
            if !range.isEmpty {
                index = distance(from : self.startIndex, to : range.lowerBound)
            }
        }
        return index
    }
}

例如,除了返回值,50我想要类似[50, 74, 91, 103]


阅读 222

收藏
2020-07-07

共1个答案

一尘不染

您只是不断扩大搜索范围,直到找不到子字符串的任何更多实例:

extension String {
    func indicesOf(string: String) -> [Int] {
        var indices = [Int]()
        var searchStartIndex = self.startIndex

        while searchStartIndex < self.endIndex,
            let range = self.range(of: string, range: searchStartIndex..<self.endIndex),
            !range.isEmpty
        {
            let index = distance(from: self.startIndex, to: range.lowerBound)
            indices.append(index)
            searchStartIndex = range.upperBound
        }

        return indices
    }
}

let keyword = "a"
let html = "aaaa"
let indicies = html.indicesOf(string: keyword)
print(indicies) // [0, 1, 2, 3]
2020-07-07