はじめに
競プロを始めて、Swiftで文字列の先頭・途中・末尾から文字を切り出す方法について学んだのでまとめてみました!
先頭から文字の切り出し
let str = "0123456789"
print(str.prefix(3))
出力結果
012
先頭から3文字切り出され、012
が出力される!
prefixとは
コレクション(配列)の先頭から指定された最大長までの部分配列を返すメソッド。
今回prefixの長さは3と指定されているので、先頭から3文字が切り出される!
末尾から文字の切り出し
let str = "0123456789"
print(str.suffix(5))
出力結果
56789
末尾から5文字切り出され、56789
が出力される!
suffixとは
コレクション(配列)の末尾から指定された最大長までの部分配列を返すメソッド。
今回suffixの長さは5と指定されているので、末尾から5文字が切り出される!
途中から文字の切り出し
先頭から位置を指定する方法と末尾から位置を指定する方法があります!
先頭から途中の位置を指定する方法
let str = "0123456789"
let index = str.index(str.startIndex, offsetBy: 2)
print(str[index])
出力結果
2
startIndex
空でない文字列の最初の文字の位置を指すプロパティ。
offsetByは距離を指定するので、先頭から2文字右にずらしたインデックスを返す!
そのインデックスを用いて、文字列から1文字を取り出す!
末尾から途中の位置を指定する方法
let index = str.index(str.endIndex,offsetBy: -2)
print(str[index])
出力結果
8
endIndex
文字列の "末尾を過ぎた "位置、つまり、有効な最後の添え字引数より 1 つ大きい位置。
offsetBy
は距離を指定するので、末尾+1した位置から2文字左にずらしたインデックスを返す!
そのインデックスを用いて、文字列から1文字を取り出すため、出力は8となる!
index(_:offsetBy:)
指定されたインデックスから指定された距離のインデックスを返すメソッド。
func index(
_ i: String.Index,
offsetBy distance: Int
) -> String.Index
i
コレクションの有効なインデックス。
offsetBy distance
オフセットiまでの距離。
戻り値としてはString.Index
を返します。
注意点
今回紹介した文字列に1文字ずつアクセスする方法では、処理時間は遅くなります。
一方、配列に変換してからアクセスすることで、処理時間は短縮できます。
そのためにとても長い文字列の場合には、下記のように、配列に変換してからアクセスする方が良いと考えられます。
let str = "0123456789"
let array = Array(str)
//let array = str.map{$0}
以下の記事を参考にしました!
コメントで教えていただき、ありがとうございます!
参考文献
参考文献