当前位置: > > > Swift - 在字符串中查找另一字符串首次出现的位置(或最后一次出现位置)

Swift - 在字符串中查找另一字符串首次出现的位置(或最后一次出现位置)

(本文代码已升级至Swift4)

我们知道 JavaScript 中有个 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置, 而 Swift 中却没有提供类似的方法。我们可以通过 String range 方法来实现一个相同的功能。

1,扩展String

这里对 String 类做个扩展,新增个 positionOf 方法。用来获取内部子字符串第一次、或最后一次出现的位置索引。(如果内部不存在该字符串则返回 -1。)
extension String {
    //返回第一次出现的指定子字符串在此字符串中的索引
    //(如果backwards参数设置为true,则返回最后出现的位置)
    func positionOf(sub:String, backwards:Bool = false)->Int {
        var pos = -1
        if let range = range(of:sub, options: backwards ? .backwards : .literal ) {
            if !range.isEmpty {
                pos = self.distance(from:startIndex, to:range.lowerBound)
            }
        }
        return pos
    }
}

2,使用样例

let str1 = "欢迎访问hangge.com。hangge.com做最好的开发者知识平台"
let str2 = "hangge"
print("父字符串:\(str1)")
print("子字符串:\(str2)")

let position1 = str1.positionOf(sub: str2)
print("子字符串第一次出现的位置是:\(position1)")
let position2 = str1.positionOf(sub: str2, backwards: true)
print("子字符串最后一次出现的位置是:\(position2)")
评论3
  • 3楼
    2018-02-09 10:52
    PINGZISAMA

    谢谢航哥

    站长回复

    不客气的。

  • 2楼
    2018-01-22 15:49
    PINGZISAMA

    航哥,倒序第一次出现的位置该怎么查找呢

    站长回复

    我补充了相关内容,你可以再看下。

  • 1楼
    2017-08-10 18:24
    mubin

    谢谢

    站长回复

    不客气