Swift5.1—访问和修改字符串

你可以通过字符串的属性和方法来访问和修改它,当然也可以用下标语法完成。

字符串索引
每一个String值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个Character的位置。

前面提到,不同的字符可能会占用不同数量的内存空间,所以要知道 Character 的确定位置,就必须从 String 开头遍历每一个 Unicode 标量直到结尾。因此,Swift 的字符串不能用整数(integer)做索引。

使用startIndex属性可以获取一个String的第一个Character的索引。使用endIndex属性可以获取最后一个Character的后一个位置的索引。因此,endIndex属性不能作为一个字符串的有效下标。如果String是空串,startIndex和endIndex是相等的。

通过调用String的index(before:)或index(after:)方法,可以立即得到前面或后面的一个索引。你还可以通过调用index(_:offsetBy:)方法来获取对应偏移量的索引,这种方式可以避免多次调用index(before:)或index(after:)方法。

你可以使用下标语法来访问String特定索引的Character。

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,将引发一个运行时错误。

//error
greeting[greeting.endIndex]
//error
greeting.index(after:endIndex)

使用indices属性会创建一个包含全部索引的范围(Range),用来在一个字符串中访问单个字符串。

for index in greeting.indices {
      print("\(greeting[index])",terminator:"")
}
//打印输出“G u t e n T a g ! ”

注:
你可以使用startIndex和endIndex属性或者index(before:)、index(after:) 方法在任意一个确认的并遵循 Collection 协议的类型里面,如上文所示是使用在 String 中,你也可以使用在 Array、Dictionary 和 Set 中。

插入和删除

调用insert(_:at:)方法可以在一个字符串的指定索引插入一个字符,调用insert(contentsOf:at:)方法可以在一个字符串的指定索引插入一个段字符串。

var welcome = "hello"
//welcome变量现在等于"hello!"
welcome.insert("!",at:welcome.endIndex)

//welcome 变量现在等于"hello there!"
welcome.insert(contentsOf:" there",at:welcome.index(before:welome.endIndex))

调用remove(at:)方法可以在一个字符串的指定索引删除一个字符,调用removeSubrange(_:)方法可以在一个字符串的指定索引删除一个子字符串。

welcome.remove(at:welcome.index(before:welcome.endIndex))
//welcome现在等于"hello there"

let range = welcome.index(welcome.endIndex,offsetBy:-6)..<welcome.endIndex
welcome.removeSubrange(range)
//welcome现在等于"hello"

containsString:是否是子字符串

var str = "Hello, playground"
str.contains("Hello")

uppercaseString 转大写
lowercaseString 转小写
capitalizedString 单词首字母大写

str.uppercased()
str.lowercased()
str.capitalized

String精度控制

let ss = String(format: "one third is %.2f", 1.0/3.0)

NSString相关方法

let s6 = " --- Hello - --  " as NSString
s6.trimmingCharacters(in: CharacterSet(charactersIn: " -"))

// NSSting
var s3:NSString = "one third is 0.33😀"
s3.substring(from: 4)
s3.substring(to: 3)
s3.substring(with: NSMakeRange(4, 5))

// String和NSString的不同
let s4 = "😀😀😀"
let s5:NSString = "😀😀😀"
s4.count
s5.length

// 去除字符串中头尾的冗余。
let s6 = " --- Hello - --  " as NSString
s6.trimmingCharacters(in: CharacterSet(charactersIn: " -"))

let range = s6.range(of: "ll")
range.location
range.length

s6.replacingOccurrences(of: "He", with: "Apo")

注:
1.你可以使用 insert(:at:)、insert(contentsOf:at:)、remove(at:) 和 removeSubrange(:) 方法在任意一个确认的并遵循 RangeReplaceableCollection 协议的类型里面,如上文所示是使用在 String 中,你也可以使用在 Array、Dictionary 和 Set 中。
2.不能使用[]获取字符,需要使用index
3.String endIndex是在String之后的一个位置,String的区间[startIndex,endIndex),字符串最后一个字母的索引是endinex-1
4.两个索引之间使用区间运算符连接获得的新的类型的变量range
5.字符串含大量unicode符,如中文及表情符,使用String更方便;而处理ASCII码,则NSString更好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容