1. 程式人生 > >Swift4 訪問和修改字串

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索引。

  1. let greeting = "Guten Tag!"
  2. greeting[greeting.startIndex]
  3. // G
  4. greeting[greeting.index(before: greeting.endIndex)]
  5. // !
  6. greeting[greeting.index(after: greeting.startIndex)]
  7. // u
  8. let index = greeting.index(greeting.startIndex, offsetBy: 7)
  9. greeting[index]
  10. // a

嘗試訪問字串範圍Character之外的索引或字串範圍之外的索引將觸發執行時錯誤。

  1. greeting[greeting.endIndex] // Error
  2. greeting.index(after: greeting.endIndex) // Error

使用該indices屬性可以訪問字串中各個字元的所有索引。

  1. for index in greeting.indices {
  2. print("\(greeting[index]) ", terminator: "")
  3. }
  4. // Prints "G u t e n T a g ! "

注意

您可以使用startIndexendIndex屬性和index(before:)index(after:)以及index(_:offsetBy:)對符合任何型別的方法Collection的協議。這包括String,如下圖所示,以及集合型別,如ArrayDictionarySet

插入和刪除

若要將單個字元插入到指定索引處的字串中,請使用該insert(_:at:)方法,並在指定索引處插入另一個字串的內容,請使用該insert(contentsOf:at:)方法。

  1. var welcome = "hello"
  2. welcome.insert("!", at: welcome.endIndex)
  3. // welcome now equals "hello!"
  4. welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
  5. // welcome now equals "hello there!"

要從指定索引處的字串中刪除單個字元,請使用該remove(at:)方法,並刪除指定範圍內的子字串,請使用以下removeSubrange(_:)方法:

  1. welcome.remove(at: welcome.index(before: welcome.endIndex))
  2. // welcome now equals "hello there"
  3. let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
  4. welcome.removeSubrange(range)
  5. // welcome now equals "hello"

注意

您可以使用insert(_:at:)insert(contentsOf:at:)remove(at:),和removeSubrange(_:)對符合任何型別的方法RangeReplaceableCollection的協議。這包括String,如下圖所示,以及集合型別,如ArrayDictionarySet