Swift等效于Java indexOf和字符串的lastIndexOf

alt*_*ser 11 string swift

我来自Java.我研究了Swift文档并理解了大部分概念.

我现在寻找的是等同于Java indexOf和lastIndexOf方法来查找字符串中子字符串的位置.

我已经找到了一个使用rangeOfString并使用startIndex属性的解决方案.这看起来有助于我定义indexOf方法.

但我认为rangeOfString只从字符串的开头开始搜索.它是否正确?如果是这样,我怎样才能反向搜索(从字符串的结尾开始)?

我的意思是让fe字符串为"hello world",如果我开始搜索"l",那么我想找到位置9处的字母而不是位置2处的字母.

Dan*_*nyl 25

在Swift 3中

Java indexOf等价物:

var index1 = string1.index(string1.endIndex, offsetBy: -4)
Run Code Online (Sandbox Code Playgroud)

Java lastIndexOf等价物:

 var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
Run Code Online (Sandbox Code Playgroud)

  • 为什么indexOf有`offsetBy:-4`? (6认同)

Vla*_*man 6

extension String {
    func indexOf(_ input: String,
                 options: String.CompareOptions = .literal) -> String.Index? {
        return self.range(of: input, options: options)?.lowerBound
    }

    func lastIndexOf(_ input: String) -> String.Index? {
        return indexOf(input, options: .backwards)
    }
}

"hello world".indexOf("l") // 2
"hello world".lastIndexOf("l") // 9
Run Code Online (Sandbox Code Playgroud)


Avi*_*bat 6

如果您希望返回的值为 Int:

extension String {

    func lastIndex(of string: String) -> Int? {
        guard let index = range(of: string, options: .backwards) else { return nil }
        return self.distance(from: self.startIndex, to: index.lowerBound)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这对我帮助很大! (3认同)