Posted at

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

More than 1 year has passed since last update.


はじめに

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さんです。

お楽しみに!