Swift4 訪問和修改字串
您可以通過其方法和屬性或使用下標語法來訪問和修改字串。
字串索引
每個String
值都有一個關聯的索引型別,String.Index
它對應Character
於字串中每個值的位置。
如上所述,不同的字元可能需要不同的記憶體量來儲存,因此為了確定哪個Character
位於特定位置,您必須從開頭或結尾迭代每個Unicode標量String
。因此,Swift字串不能用整數值索引。
使用該startIndex
屬性訪問第一個Character
的位置String
。該endIndex
屬性是a中最後一個字元後的位置String
。因此,該endIndex
屬性不是字串下標的有效引數。如果a String
是空的,startIndex
endIndex
是相等的。
您可以使用index(before:)
和index(after:)
方法訪問給定索引之前和之後的索引String
。要訪問遠離給定索引的索引,可以使用該index(_:offsetBy:)
方法而不是多次呼叫其中一種方法。
您可以使用下標語法來訪問Character
特定String
索引。
- let greeting = "Guten Tag!"
- greeting[greeting.startIndex]
- // G
- greeting[greeting.index(before: greeting.endIndex)]
- // !
- greeting[greeting.index(after: greeting.startIndex)]
- // u
- let index = greeting.index(greeting.startIndex, offsetBy: 7)
- greeting[index]
- // a
嘗試訪問字串範圍Character
之外的索引或字串範圍之外的索引將觸發執行時錯誤。
- greeting[greeting.endIndex] // Error
- greeting.index(after: greeting.endIndex) // Error
使用該indices
屬性可以訪問字串中各個字元的所有索引。
- for index in greeting.indices {
- print("\(greeting[index]) ", terminator: "")
- }
- // Prints "G u t e n T a g ! "
注意
您可以使用startIndex
與endIndex
屬性和index(before:)
,index(after:)
以及index(_:offsetBy:)
對符合任何型別的方法Collection
的協議。這包括String
,如下圖所示,以及集合型別,如Array
,Dictionary
和Set
。
插入和刪除
若要將單個字元插入到指定索引處的字串中,請使用該insert(_:at:)
方法,並在指定索引處插入另一個字串的內容,請使用該insert(contentsOf:at:)
方法。
- var welcome = "hello"
- welcome.insert("!", at: welcome.endIndex)
- // welcome now equals "hello!"
- welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
- // welcome now equals "hello there!"
要從指定索引處的字串中刪除單個字元,請使用該remove(at:)
方法,並刪除指定範圍內的子字串,請使用以下removeSubrange(_:)
方法:
- welcome.remove(at: welcome.index(before: welcome.endIndex))
- // welcome now equals "hello there"
- let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
- welcome.removeSubrange(range)
- // welcome now equals "hello"
注意
您可以使用insert(_:at:)
,insert(contentsOf:at:)
,remove(at:)
,和removeSubrange(_:)
對符合任何型別的方法RangeReplaceableCollection
的協議。這包括String
,如下圖所示,以及集合型別,如Array
,Dictionary
和Set
。