Contents
はじめに
Swiftを学習していて、文字列から特定のindexの文字を抜き出したかったのですがつまづいたのでまとめてみます。
以下のバージョンで実行しています。
Xcode: Version 13.2.1 (13C100)
Swift: 5.5.2
結論
最初に結論からお伝えします。
- Swiftで文字列から特定の文字を指定するときはString.Indexを利用する。
- 特定のindexの文字を指定するときはindex(_:offsetBy:)メソッドを利用する。
具体的な内容について見ていきたいと思います。
失敗するパターン
例えば「吾輩は猫である」から特定のindexの文字を抜き出したいとします。
JavaScriptであれば
Rubyであれば
のように[]でindexを指定すれば文字列から文字を抜き出すことができます。
Swiftで同じようにしようとすると
上記のようなエラーが出てしまいます。
String.Indexを利用しろと書かれていますのでString.Indexを利用してみます。
String.Indexを利用してみる
String.Index型は文字列内の位置を表す型です。
String.Index型を用いることで文字列内の特定のIndexを指定します。
例えば文字列の先頭の文字を取得する場合はstartIndexを利用します。
末尾のindexを取得する場合はendIndexを利用しますが注意が必要です。
endIndexで取得できるindexは最後の文字のIndexではなく、最後の文字の次のIndexが取得されてしまいます。
そのためindexをずらしてあげる必要があります。
index(_:offsetBy:)を利用して取得するindexをずらす
取得するindexをずらしたいときはindex(_:offsetBy:)メソッドを利用します。
第1引数に基準となるIndex、第2引数にindexをずらす数を指定します。
index(_:offsetBy:)を利用して特定のindexの文字を取得する
上記を応用して特定のindexの文字を取得してみましょう。
先頭の文字のindexである0から3つずらした「猫」が取得できました。
特定の範囲の文字列を抜き出す
さらに上記を応用して特定の範囲の文字列を抜き出してみましょう。
index(_:offsetBy:)と範囲演算子の…を利用します。
関数化してみました。
まとめ
この記事ではSwiftで文字列から特定の文字を抜き出す処理についてまとめてみました。
- Swiftで文字列から特定の文字を指定するときはString.Indexを利用する。
- 特定のindexの文字を指定するときはindex(_:offsetBy:)メソッドを利用する。
私の理解が甘く、間違った情報を記載している部分があるかもしれません。
誤りなどありましたらご指摘いただけましたら幸いです。
おまけ
競技プログラミングなどでよく見かける文字列を一文字ずつ出力するという問題をこの記事の内容を使ってやってみたいと思います。
参考資料
Swift 実践入門 増補改訂第 3 版
https://developer.apple.com/documentation/swift/string/index
https://developer.apple.com/documentation/swift/string/1786175-index
https://chusotsu-program.com/swift-string-index/
https://chusotsu-program.com/swift-string-slice/
http://chusotsu-program.com/swift-index-offset/