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

简介: 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更好。

目录
相关文章
|
编译器 Swift iOS开发
10 Swift中的字符串
Swift中的字符串
82 0
|
22天前
|
Swift iOS开发
Swift 字符串
10月更文挑战第26天
27 3
|
Java Swift iOS开发
Swift - 字符串
Swift - 字符串
110 0
|
Swift 索引
Swift实用小册03:字符串的使用
Swift实用小册03:字符串的使用
226 0
Swift实用小册03:字符串的使用
|
存储 Swift
Swift5.1—字符串的Unicode表示形式
Swift5.1—字符串的Unicode表示形式
458 0
Swift5.1—字符串的Unicode表示形式
|
存储 Swift
Swift5.1—子字符串
Swift5.1—子字符串
348 0
Swift5.1—子字符串
|
编译器 Swift
Swift5.1—字符串字面量
Swift5.1—字符串字面量
162 0
Swift5.1—字符串字面量
|
Swift
swift微博第2天(命名空间和控制器字符串)
swift微博第2天(命名空间和控制器字符串)
150 0
swift微博第2天(命名空间和控制器字符串)
【Swift4】(2) 运算符 | 字符串
【Swift4】(2) 运算符 | 字符串
128 0
Swift5.1—字符串前缀/后缀相等
Swift5.1—字符串前缀/后缀相等
273 0