対象:
Swift

部分文字列の取得(Swift)

部分文字列を取得する方法をいくつか挙げておく。先頭1文字を取得するには、prefixメソッドを利用する。末尾1文字を取得するには、suffixメソッドを利用する。

        let str1 = "0123456789"
        // 先頭1文字取得
        // Swift 3の書き方
        // print(str1.substring(to: str1.index(after: str1.startIndex)))
        // Swift 4の書き方
        print(str1.prefix(1))
        // 末尾1文字取得
        // Swift 3の書き方
        // print(str1.substring(from: str1.index(before: str1.endIndex)))
        // Swift 4の書き方
        print(str1.suffix(1))
0
9

String.Indexと[]を使うとString中の任意の1文字(Character)を取得できる。

        // 先頭1文字(Character)取得
        print(str1[str1.startIndex])
        // 末尾1文字(Character)取得
        print(str1[str1.index(before: str1.endIndex)])
0
9

prefixメソッド、およびsuffixメソッドは共に取得する文字列の最大長を指定できるので、先頭n文字、あるいは末尾n文字も取得することができる。この時の「文字列の長さ」の考え方はSwift 4.0から新たにStringに追加されたcountの考え方になるだろう。

        // 先頭3文字取得
        // Swift 3の書き方
        // print(str1.substring(to: str1.index(str1.startIndex, offsetBy: 3)))
        // Swift 4の書き方
        print(str1.prefix(3))
        // 末尾3文字取得
        // Swift 3の書き方
        // print(str1.substring(from: str1.index(str1.endIndex, offsetBy: -3)))
        // Swift 4の書き方
        print(str1.suffix(3))
012
789

[]と範囲演算子を使えば、任意の位置からn文字を取得できる。

        // 先頭3文字目から3文字(= 5 - 2)取得
        print(str1[str1.index(str1.startIndex, offsetBy: 2)..<str1.index(str1.startIndex, offsetBy: 5)])
234

firstIndex(of:)メソッドは任意の文字が見つかった場合、その最初のString.Indexを返してくれるので、例えば文字列中の?から?までをそれを含めて抜き出したい場合、

        // ?から?までを抜き出す
        let str2 = "Apple?& Green apple?"
        // Swift 4の書き方
        //print(str2[(str2.index(of: "?") ?? str2.startIndex)...(str2.index(of: "?") ?? str2.index(before: str2.endIndex))])
        print(str2[(str2.firstIndex(of: "?") ?? str2.startIndex)...(str2.firstIndex(of: "?") ?? str2.index(before: str2.endIndex))])
?& Green apple?

のように書くこともできる。

(2015/02/16)
() Swift 5.0対応。

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright© 2004-2019 モバイル開発系(K) All rights reserved.
[Home]