Swift4.2 访问和修改字符串

时间:2024-01-21 19:13:09

您可以通过其方法和属性或使用下标语法来访问和修改字符串。

字符串索引

每个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