2016-09-30 1 views
2

Javaから来ました。私はSwiftのドキュメンテーションを学び、ほとんどのコンセプトを理解しました。JavaのindexOfとlastIndexOfのSwift相当文字列

私が今探しているのは、文字列中の部分文字列の位置を見つけるためのJavaのindexOfメソッドとlastIndexOfメソッドに相当します。

すでにrangeOfStringとstartIndexプロパティを使用したソリューションが見つかりました。 indexOfメソッドを定義すると役に立ちます。

しかし、私はrangeOfStringは文字列の先頭から検索を開始すると思います。これは正しいです?もしそうなら、逆方向(文字列の最後から始めまで)でどうすれば検索できますか?

私はf.e.を持っていることを意味します。文字列の「Hello World」と私はその後、私は、9位の手紙を見つけたいとしない位置に「L」の検索を開始場合2.スウィフトで

+1

がhttp://stackoverflow.com/questions/28182441/swift-how-to-get-substring-from-start-を見てくださいlast-of-character-index-of-characterでは、 '.BackwardsSearch'オプションを含む様々なメソッドを表示します。 –

+0

"some string" .characters.indexOf( 'someChar')を使用することはできますが、それは文字だけで動作します.. – Dan

+0

私の答え@altralaserを確認してください。 – Danyl

答えて

13

の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

あなたは、戻り値が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) 
    } 
} 
関連する問題