2016-09-30 46 views
2

我來自Java。我研究了Swift文檔並理解了大部分概念。Swift等效於Java的indexOf和lastIndexOf的字符串

我現在正在尋找的是一個等價於Java indexOf和lastIndexOf方法來查找字符串中子字符串的位置。

我已經找到了rangeOfString和使用startIndex屬性的解決方案。這對我定義indexOf方法很有幫助。

但我認爲rangeOfString只能從字符串的開始處開始搜索。它是否正確?如果是這樣,我怎麼能反向搜索(從字符串的結尾開始)?

我的意思是有f.e.字符串「Hello World」的,如果我開始搜索「L」,那麼,我想找到在9位字母,而不是在位置2

+1

看一看http://stackoverflow.com/questions/28182441/swift-how-to-get-substring-from-start-它顯示了各種方法,包括'.BackwardsSearch'選項。 –

+0

你可以使用「some string」.characters.indexOf('someChar'),但它只適用於字符。 – Dan

+0

請檢查我的回答@altralaser。 – Danyl

回答

13

在斯威夫特3

的Java的indexOf相當於:

var index1 = string1.index(string1.endIndex, offsetBy: -4) 

的Java lastIndexOf相當於:

var index2 = string2.range(of: ".", options: .backwards)?.lowerBound 
+0

爲什麼你有indexOf的'offsetBy:-4'? – Laurent

2
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 
+0

幫助了我。謝謝 – mcabe

0

如果你想返回的值是一個詮釋:

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) 
    } 
}