【Swift】

文字列を様々な条件で切り出す(最初 or 最後の1文字、最初 or 最後から指定した文字数、指定した文字列の範囲)

first、last、suffix、prefix、startIndex、indexなどの使い方

投稿日 2022/01/22 更新日 2022/01/22


こんにちは。当サイトの管理者「元木皇天」です。

今回は、Swiftで文字列をいろいろな条件で切り出して取得する方法について解説いたします。

環境
OS:MacOS Big Sur
Xcode:バージョン13.2
Swift:バージョン5.3

やりたいこと

1.文字列の最初の1文字を取得する

例:"ABCDEFGHI"の場合
"A"を取得

2.文字列の最後の1文字を取得する

例:"ABCDEFGHI"の場合
"I"を取得

3.文字列の最初から指定の文字数を取得する

例:"ABCDEFGHI"の最初から3文字取得する場合
"ABC"を取得

4.文字列の最後から指定の文字数を取得する

例:"ABCDEFGHI"の最後から3文字取得する場合
"GHI"を取得

5.文字列の指定した位置から指定した位置までを取得する

例:"ABCDEFGHI"の4文字目〜6文字目を取得する場合
"DEF"を取得

参考文献
詳解 Swift 第5版
String first Apple Developer Site
String last Apple Developer Site
String suffix() Apple Developer Site
String prefix() Apple Developer Site
String startIndex Apple Developer Site
String index Apple Developer Site
String subscript Apple Developer Site

文字列の最初の1文字を取得する方法

まずは文字列の最初の1文字を取得する方法について解説いたします。

最初の1文字を取得するには「first」を使用します。

使い方は以下の通りです。

//文字列生成
let str: String = "ABCDEFGHI"
//文字列の最初の1文字を取得する
let firstStr: Character? = str.first

「first」を使用することで、このようにとてもシンプルに取得できます。

ちなみに、firstを使用して得られる値の型はOptional<Character>型なので注意してください。

アンラップしてString型にして使うと良いでしょう。

実際に使用すると以下のような感じになります。また、String型として使用するのであれば以下の例を参考にすると良いと思います。

firstの使用例

文字列の最後の1文字を取得する

文字列の最後の1文字を取得する方法も簡単です。

先ほどとは違い、「最後」を意味する英単語の「last」を使用することで文字列の最後の1文字を取得できます。

使い方は以下の通りです。

//文字列生成
let str: String = "ABCDEFGHI"
//文字列の最後の1文字を取得する
let lastStr: Character? = str.last

こちらも先程の「first」と同様にOptional<Character>型なのでアンラップしてString型にして使用してください。

実際の使用例は以下の通りです。

lastの使用例

文字列の最初から指定の文字数を取得する方法

文字列の最初(先頭)から指定の文字数を取得するには「prefix()」メソッドを使用します。

今までの1文字取得とは異なり、メソッドですので注意してください。

メソッドの引数には、「maxLength: Int」を使用します。(以下画像参照)

prefix()で使用する引数

使い方は以下の通りです(例として3文字取得しています)。

//文字列生成
let str: String = "ABCDEFGHI"
//文字列の最初から3文字取得する
let prefixStr: Substring = str.prefix(3)

こちらは戻り値の型がSubstring型なので注意してください。

あまり馴染みがないかもしれませんが、Substringという型があります。

(今回は深く言及しませんが、いずれ記事にはしたいと思います。)

以下は実際の使用例です。String型として使用する例も載せていますので参考にしていただけたら嬉しいです。

prefix()の使用例

文字列の最後から指定の文字数を取得する方法

次は先ほどとは反対に、文字列の最後(末尾)から指定の文字数を取得する方法についてです。

使用するのは「suffix()」メソッドです。

こちらもメソッドの引数には、「maxLength: Int」を使用します(以下画像参照)。

suffix()使用時の引数

使い方は以下の通りです(例として3文字取得しています)。

//文字列生成
let str: String = "ABCDEFGHI"
//文字列の最後から3文字取得する
let suffixStr: Substring = str.suffix(3)

こちらも戻り値の型がSubstring型なので注意してください。

以下は実際の使用例です。String型として使用する例も載せていますので参考にしてみてください。

suffix()の使用例

文字列の指定した位置から指定した位置までを取得する

最後は、指定した位置から指定した位置まで取得する方法について解説します。

こちらは今までと違ってやや面倒です(笑)。

使用するのは「startIndex()」「index()」です。

これらを使用して得た値をRange(範囲指定)することで、指定した位置から指定した位置の文字列を得ることができます。

取得の仕方は以下の通りです。(以下の例では、"DEF"を取得する処理を記載しています。)

//文字列生成
let str: String = "ABCDEFGHI"

//文字列の最初(1文字目)の"位置"を取得する
let index1: String.Index = str.startIndex

//上記の「index1」を使用して文字列の最初から"D"までの"位置"を取得する
let index2: String.Index = str.index(index1, offsetBy: 3)

//上記の「index1」を使用して文字列の最初から"F"までの"位置"を取得する
let index3: String.Index = str.index(index1, offsetBy: 5)

//上記の「index2」「index3」を使用して、文字列「DEF」を取得する
let DEFstr: Substring = str[index2...index3]

なんか急によくわからなくなりましたね(笑)。

簡単にですが説明すると、そもそもSwiftでは文字列(String)の中の文字の位置をString.Indexという型で保持することができます。

そのため、まず初めに「startIndex」を使用して、文字列の最初の文字の位置を取得しています。

その後、「index()」メソッドを使用して、文字列の最初からoffsetで指定した文字数の位置を取得することができます。

このようにして位置を保持した変数を2つ用意して、最後にRangeで範囲を指定してあげれば欲しい範囲の文字列が取得できるという感じです。(上記コードの最後の行)

ちなみに、Rangeで範囲指定してなぜ文字列が取得できるのかは、「subscript」という機能があるからです。

詳しくは以下を確認してください。

String subscript Apple Developer Site

(String.Index型についてはここでは深掘りはしません。ご了承ください。)


実際に使用すると以下のような感じになります。

指定した範囲の文字列を取得する使用例

まとめ

Swiftで文字列を切り出すには
最初の1文字を取得
str.first
最後の1文字を取得
str.last
最初から指定の文字数を取得
str.prefix()
最後から指定の文字数を取得
str.suffix()
指定した範囲の文字列を取得
str[String.Index1...String.Index2]
を使用する。

参考文献・おすすめ文献

String first Apple Developer Site
String last Apple Developer Site
String suffix() Apple Developer Site
String prefix() Apple Developer Site
String startIndex Apple Developer Site
String index Apple Developer Site
String subscript Apple Developer Site