你可以通过字符串的属性和方法来访问和修改它,当然也可以用下标语法完成。
字符串索引
每一个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更好。