8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

競プロで使える!〜文字列から一部の文字を切り出す方法〜

Last updated at Posted at 2024-01-13

はじめに

競プロを始めて、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}

以下の記事を参考にしました!
コメントで教えていただき、ありがとうございます!

参考文献

参考文献

8
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?