LoginSignup
0
1

【Swift】インデックスを使った文字列操作

Posted at

インデックスを使った文字列操作

解説する機能

  • 文字列のインデックス
  • startIndexプロパティ
  • lastIndexプロパティ
  • index(:offsetBy:)メソッド

解説

Swiftにおいて、文字列リテラルに「添え字で整数を指定する」ことは不正です。
したがって、"swift"の3文字目iを取得するために、「整数の2」は指定できません。

"swift"[2]  // error
// cannot subscript String with an Int, use a String.Index instead.

このようなコードに対して、コンパイラは「整数ではなく、文字列のインデックスを指定すべきだ」と警告します。

最初と最後のインデックス

文字列のインデックスは、「String型の内部」で定義されたIndex型の値です。
配列のインデックスと同様に、文字列のインデックスもゼロから数えます。
コード上では、インデックスは整数のように見えますが、実際は互いに互換性のない値です。

先頭や最後尾のインデックスは、文字列のプロパティから取得できます。

let start = "swift".startIndex   // 0
let last  = "swift".lastIndex    // 4

途中のインデックス

途中のインデックスは、index(:offsetBy:)メソッドで取得できます。
index(:offsetBy:)メソッドには「起点の位置」と「オフセット量」を指定します。
途中のインデックスを言い換えると、「先頭から任意の量だけオフセットした位置」です。

次のコードは、"swift"という文字列の「先頭から2だけオフセットした位置」のインデックスを取得します。

let offsetByTwo = "swift".index(start, offsetBy: 2)   // 2 

取得したoffsetByTwo定数は2ですが、この値は整数ではなくインデックスです。
したがって、文字列の添え字に指定できます。

"swift"[offsetByTwo]    // i

"swift"という文字列の「インデックス2の位置にある文字」は"i"です。
実のところ、データ上は文字列を「一連の文字が並んだコレクション」とみなすことができます。

0
1
0

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
0
1