[Swift3] Stringのプロパティ/メソッドのまとめ (文字列操作)

  • 23
    Like
  • 0
    Comment

はじめに

3日目は、(株)スマートテック・ベンチャーズの串田(@eKushida)が担当します。
今回は、Stringのプロパティとメソッドをまとめました。

ラインナップ

下記にSwift2との変更有無も合わせて、リストアップしました。

項番 説明 Swift2.x Swift3.x
1 空文字チェックする isEmpty 変更なし
2 文字数を取得する characters.count 変更なし
3 文字列の一部を取得する substringToIndex
substringFromIndex
substringWithRange
変更あり
substring
4 文字列を数値に変換する Int 変更なし
5 文字列を区切り文字で分割する componentsSeparatedByString 変更あり
components
6 文字列を置換する stringByReplacingOccurrencesOfString 変更あり
replacingOccurrences
7 文字列のPrefixを調べる hasPrefix 変更なし
8 文字列のSuffixを調べる hasSuffix 変更なし
9 文字列に該当の文字列が含まれるか調べる rangeOfString 変更あり
range
10 文字列の前後の空白を削除する stringByTrimmingCharactersInSet 変更あり
trimmingCharacters
11 文字列の前後の改行を削除する stringByTrimmingCharactersInSet 変更あり
trimmingCharacters
12 文字列をURLエンコードする stringByAddingPercentEncodingWithAllowedCharacters 変更あり
addingPercentEncoding
13 文字列をURLデコードする stringByRemovingPercentEncoding 変更あり
removingPercentEncoding
14 文字列を大文字に変換する uppercaseString 変更あり
uppercased
15 文字列を小文字に変換する lowercaseString 変更あり
lowercased

サンプル

Swift3.x系の利用シーンをご説明します。

1. 空文字チェックする(isEmpty)

Swift2/3
        let str = ""
        print(str.isEmpty ? "空です" : str)

        // 実行結果
        // 空です

2. 文字数を取得する(characters.count)

Swift2/3
        let str = "1234567890"
        print(str.characters.count) 

        // 実行結果
        // 10

3. 文字列の一部を取得する(substring)

Swift3
        let str = "1234567890"

        //先頭から5文字
        print(str.substring(to: str.index(str.startIndex, offsetBy: 5))) 

        //末尾から3文字
        print(str.substring(from: str.index(str.endIndex, offsetBy: -3))) 

        //先頭から3文字〜末尾から3文字の範囲
        print(str.substring(with: str.index(str.startIndex, offsetBy: 3) ..< str.index(str.endIndex, offsetBy: -3)))

        // 実行結果
        // 12345
        // 890
        // 4567
Swift2
        let str = "1234567890"

        //先頭から5文字
        print(str.substringFromIndex(str.startIndex.advancedBy(5)))

        //末尾から3文字
        print(str.substringFromIndex(str.endIndex.advancedBy(-3)))

        //先頭から3文字〜末尾から3文字の範囲
        let startIndex = str.startIndex.advancedBy(3)
        let endIndex = startIndex.advancedBy(3)
        print(str.substringWithRange(Range(start:startIndex , end: endIndex)))

4. 文字列を数値に変換する(Int)

Swift2/3
        let testData = ["1","2","♥","4","あ"]

        _ = testData.map {
            print(Int($0) ?? "数値以外")
        }

        // 実行結果
        // 1
        // 2
        // 数値以外
        // 4
        // 数値以外

5. 文字列を区切り文字で分割する(components)

Swift3
        let str = "a,b,c,d,e,f,g"
        let separatedArray = str.components(separatedBy: ",")

        _ = separatedArray.map {
            print($0)
        }

        // 実行結果
        // a
        // b
        // c
        // d
        // e
        // f
        // g
Swift2
        let str = "a,b,c,d,e,f,g"
        let separatedArray = str.componentsSeparatedByString(",")

        _ = separatedArray.map {
            print($0)
        }

6. 文字列を置換する(replacingOccurrences)

Swift3
        let str = "S♥T♥V"
        print(str.replacingOccurrences(of: "♥", with: ""))

        // 実行結果
        // STV
swift2
        let str = "S♥T♥V"
        print(str.stringByReplacingOccurrencesOfString("♥", withString: ""))

7. 文字列のPrefixを調べる(hasPrefix)

Swift2/3
        let testData = ["stv001","Stv002","stv003","ssd004","s"]

        let stvMembers = testData.filter {
            $0.hasPrefix("stv")
        }

        _ = stvMembers.map {
            print($0)
        }

        // 実行結果
        //stv001
        //stv003

8. 文字列のSuffixを調べる(hasSuffix)

Swift2/3
        let testData = ["stv001","Stv002","stv003","ssd004","s001"]

        let firstMembers = testData.filter {
            $0.hasSuffix("001")
        }

        _ = firstMembers.map {
            print($0)
        }

        // 実行結果
        //stv001
        //s001

9. 文字列に該当の文字列が含まれるか調べる(range)

Swift3
        let str = "あああああああああstvいいいいいいいいいいいいい"

        if let index = str.range(of: "stv") {
            print("見つかりました。 index: \(str.distance(from: str.startIndex, to: index.lowerBound))")
        } else {
            print("見つかりませんでした")
        }

        // 実行結果
        // 見つかりました。 index: 9
swift2
        let str = "あああああああああstvいいいいいいいいいいいいい"

        if let range = str.rangeOfString("stv") {
            print("見つかりました。 index: \(range.startIndex)")
        } else {
            print("見つかりませんでした")
        }

10. 文字列の前後の空白を削除する(trimmingCharacters)

Swift3
        let str = " STV "
        print(str.trimmingCharacters(in: .whitespaces).uppercased())

        // 実行結果
        // STV
swift2
        let str = " STV "
        print(str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()))

11. 文字列の前後の改行を削除する(trimmingCharacters)

Swift3
        let str = "\nSTV\n"
        print(str.trimmingCharacters(in: .whitespacesAndNewlines).uppercased())

        // 実行結果
        // STV
swift2
        let str = "\nSTV\n"
        print(str.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()))

12. 文字列をURLエンコードする(addingPercentEncoding)

Swift3
        let str = "スマートテック・ベンチャーズ"
        print(str.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) ?? "エンコードできませんでした")

        // 実行結果
        // %E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%86%E3%83%83%E3%82%AF%E3%83%BB%E3%83%99%E3%83%B3%E3%83%81%E3%83%A3%E3%83%BC%E3%82%BA
swift2
        let str = "スマートテック・ベンチャーズ"
        print(str.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet()) ?? "エンコードできませんでした")

13. 文字列をURLデコードする(removingPercentEncoding)

Swift3
        let str = "%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%86%E3%83%83%E3%82%AF%E3%83%BB%E3%83%99%E3%83%B3%E3%83%81%E3%83%A3%E3%83%BC%E3%82%BA"
        print(str.removingPercentEncoding ?? "デコードできませんでした")

        // 実行結果
        // スマートテック・ベンチャーズ
swift2
        let str = "%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%86%E3%83%83%E3%82%AF%E3%83%BB%E3%83%99%E3%83%B3%E3%83%81%E3%83%A3%E3%83%BC%E3%82%BA"
        print(str.stringByRemovingPercentEncoding ?? "デコードできませんでした")

14. 文字列を大文字に変換する(uppercased)

Swift3
        let str = "stv"
        print(str.uppercased())

        // 実行結果
        // STV
swift2
        let str = "stv"
        print(str.uppercaseString)

15. 文字列を小文字に変換する(lowercased)

Swift3
        let str = "STV"
        print(str.lowercased())

        // 実行結果
        // stv
swift2
        let str = "STV"
        print(str.lowercaseString)

最後に

他にも利用するものがあれば、随時追加したいと思います。
最後までご覧いただき、ありがとうございました。

スマートテック・ベンチャーズでは、未経験だけどiOSの開発をやりたい!という人を募集しています。
Advent Calendarのスマートテック・ベンチャーズページに会社およびWantedlyのURLをのせていますので、興味のある方は是非ご覧ください。
https://www.wantedly.com/companies/st-ventures/info

明日は、@k_motoさんです。
お楽しみに!