文字を分割したい事は多々あります。Swiftではcomponents(separatedBy:)、あるいはcharacters.splitを使います。
Swift 4.0
String 文字列分割
Swift2からこの辺りの変更がありました。としか言いようがないので、淡々とメモるだけです。
components(separatedBy: )
components(separatedBy: ” “)で文字列を” “スペースで分割した場合です
import Foundation が必要
「book note pen bag」という文字列から空白で分割すると
1 2 3 4 5 6 7 8 9 10 |
import UIKit import Foundation ... let str:String = "book note pen bag" let arr:[String] = str.components(separatedBy: " ") print(arr[0]) // "book" print(arr[1]) // "note" print(arr[2]) // "pen" print(arr[3]) // "bag" |
よくあるケースで年月日が下のように2017/10/9のように”/”で区切られていて、個別に取り出したい時に使います。
1 2 3 4 5 6 7 8 9 10 11 |
import UIKit import Foundation // ... let str:String = "2017/10/9" // 年月日を / で分割 let arr:[String] = str.components(separatedBy: "/") print(arr[0]) // "2017" print(arr[1]) // "10" print(arr[2]) // "9" |
このあとは文字を数字に変換して使い回す事もあるでしょうか。Int, String, Double 変換
改行コード “\n” にも使えます
1 2 3 4 5 6 7 8 9 |
import UIKit import Foundation //... let str:String = "Apple\nGoogle\nAmazon" let arr:[String] = str.components(separatedBy: "\n") print(arr[0]) // "Apple" print(arr[1]) // "Google" print(arr[2]) // "Amazon" |
components(separatedBy: CharacterSet.)
CharacterSet.を使うと、絵文字でもできます。
1 2 3 4 5 6 7 8 9 10 11 12 |
import UIKit import Foundation // ... let charSet = CharacterSet(charactersIn: "🐱") let animals = "猫🐱魚🐟"; // 猫ちゃんで分割せよ! let arr4 = animals.components(separatedBy: charSet) // へい、わかりゃした。にゃん print (arr4[0]) // "猫" print (arr4[1]) // "魚🐟" |
characters.split
Swift 1.2 で使っていた方法はエラーになりますので忘れましょう。(忘れるのは得意です)Swift3以降ではこんな感じです。
1 2 3 4 5 6 7 8 |
let str1 = "分割の方法が、Swift2から変わった。よくある事です、はい。" // 句読点で分割 let strArray = str1.characters.split{$0 == "、"}.map(String.init) print(strArray[0]) // "分割の方法が" print(strArray[1]) // "Swift2から変わった。よくある事です" print(strArray[2]) // "はい。" |
スペースで分割すると
1 2 3 4 5 6 7 |
let flag = "🇺🇸 🇯🇵 🇫🇷" let flags = flag.characters.split{$0 == " "}.map(String.init) print(flags[0]) // "🇺🇸" print(flags[1]) // "🇯🇵" print(flags[2]) // "🇫🇷" |
関連ページ:
References:
– iOS Developer Librarry
– Split a String into an array
– Swift: Split a String into an array