文字列のメソッドやプロパティ、あるいはサブスクリプトシンタックスを利用して、文字列にアクセス、または文字列を変更します。
文字列インデックス
各 String
値には、文字列内での各 Character
の位置に対応するインデックス型 String.Index
を持ちます。
先述のように、文字によって異なるメモリ量が必要で、どの Character
がどの位置にあるかを特定するために、String
の最初から最後までの各 Unicode スカラを繰り返し処理する必要があります。そのため、Swift の文字列は整数値でインデックスすることができません。
String
の最初の Character
の位置にアクセスするために、startIndex
プロパティを利用します。endIndex
プロパティの位置は、String
の最終文字の後になります。結果として、endIndex
プロパティは文字列のサブスクリプト引数として有効ではありません。String
が空の場合、startIndex
と endIndex
は等しくなります。
String.Index
値は、predecessor()
メソッドで直前のインデックスに、successor()
メソッドで直後のインデックスにアクセスすることができます。String
のどのインデックスにも、これらのメソッドをつなげるか、advancedBy(_:)
メソッドによって他のインデックスにアクセスすることができます。文字列の範囲外にあるインデックスにアクセスすると、実行時エラーが発生することになります。
String
の特定のインデックスにある Character
にアクセスするために、サブスクリプトシンタックスを使うことができます。
let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G
greeting[greeting.endIndex.predecessor()]
// !
greeting[greeting.startIndex.successor()]
// u
let index = greeting.startIndex.advancedBy(7)
greeting[index]
// a
文字列の範囲外のインデックスにある Character
にアクセスすると、実行時エラーが発生します。
greeting[greeting.endIndex] // error
greeting.endIndex.successor() // error
文字列内の個々の文字にアクセスするための全インデックスを持つ Range
を生成するには、characters
プロパティの indices
プロパティを利用します。
for index in greeting.characters.indices {
print("\(greeting[index]) ", terminator: "")
}
// "G u t e n T a g ! " と出力
挿入と削除
指定したインデックスに文字を挿入するには、insert(_:atIndex:)
メソッドを利用します。
var welcome = "hello"
welcome.insert("!", atIndex: welcome.endIndex)
// welcome は "hello!"
指定したインデックスにコンテンツを挿入するには、insertContentsOf(_:at:)
メソッドを利用します。
welcome.insertContentsOf(" there".characters, at: welcome.endIndex.predecessor())
// welcome は "hello there!"
指定したインデックスの文字を削除するには、removeAtIndex(_:)
メソッドを利用します。
welcome.removeAtIndex(welcome.endIndex.predecessor())
// welcome は "hello there"
指定した範囲の部分文字列を削除するには、removeRange(_:)
メソッドを利用します。
let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex
welcome.removeRange(range)
// welcome は "hello"
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.