2016-09-30 88 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) 
    } 
}