一、连接字符串和字符
String值能够被加起来(或者说连接),使用加运算符( +)来创建新的String值:
var string1 = "我是"
var string2 = "中国人"
let str = string1 + string2
print(str)
使用 String类型的 append()方法来可以将多个 String拼接到一块,也可以给一个 String变量的末尾追加 Character值:
var string1 = "我是"
var string2 = "中国人"
let s1:Character = "q"
let str1 = string1.appending(string2)
string1.append(s1)
print(str1)
二、字符串插值
字符串插值是一种从混合常量、变量、字面量和表达式的字符串字面量构造新 String值的方法
var name = "hlt"
var age = 20
var height = 1.75
let lable = UILabel()
lable.frame = CGRect(x: 100, y: 100, width: 300, height: 40)
lable.backgroundColor = UIColor.red
lable.text = "\(name)是一位年龄\(age)岁,身高\(height)米的中国人"
- 1、每一个你插入到字符串字面量的元素都要被一对圆括号包裹,然后使用反斜杠前缀。
- 2、当name等以 \(name)的形式插入到了字符串字面量当中。当字符串插值需要被用来创建真的字符串的时候,这个占位符就会被name的真实值代替。
var name = "hlt"
var age = 20
var height = 1.75
let lable = UILabel()
lable.frame = CGRect(x: 100, y: 100, width: 300, height: 40)
lable.backgroundColor = UIColor.red
lable.text = String(format: "%@是一位年龄%d岁,身高%f米的中国人", name,age,height)
- 使用 String类型的 format方法直接格式化
三、访问修改字符串
1、索引类型
每一个 String值都有相关的索引类型, String.Index,它相当于每个 Character在字符串中的位置。
- startIndex : String中第一个 Character的位置
- endIndex: String中最后一个字符后的位置,也就是比最后一个字符串大于1的位置。
let startIndext:String.Index = string.startIndex
let endIndext:String.Index = string.endIndex
let firstString = string[startIndext]
print(firstString)
输出字符串是a
let endString = string[endIndext]
编译器报越界错误,endIndext并不是字符串下标脚本的合法实际参数。
- index(before:) : 访问给定索引的前一个
- index(after:): 访问给定索引的后一个
var string = "abcdefgh"
let str1 = string[string.index(before: string.endIndex)]
let str2 = string[string.index(after: string.startIndex)]
print(str1)
print(str2)
- index(_:offsetBy:): 访问给定索引的前几个或者后几个,by的值>0后几个,by值<0,后几个
var string = "abcdefgh"
let indext = string.index(string.endIndex, offsetBy: -1)
let indext1 = string.index(string.startIndex, offsetBy: 1)
print(string[indext])
print(string[indext1])
- firstIndex(of: )根据给定的字符获取第一个索引
var string = "abcdefghhh"
let indext:String.Index = string.firstIndex(of: "h")!
第一个h的索引
2、Range
var string = "abcdefghhh"
let indext1:String.Index = string.firstIndex(of: "b")!
let indext2:String.Index = string.firstIndex(of: "g")!
let rang:Range = indext1..
let rang:Range = indext1.. = indext1...indext2
3、String的插入和删除
- insert( at: ):插入一个字符
- string.insert(contentsOf:, at: ):插入一个字符串
import UIKit
var string = "abcdefghhh"
string.insert("1", at: string.startIndex)
string.insert(contentsOf: "666", at: string.endIndex)
string.insert(contentsOf: "666", at: string.firstIndex(of: "d")!)
string.insert(contentsOf: "666", at: string.index(before: string.endIndex))
string.insert(contentsOf: "666", at: string.index(after: string.startIndex))
string.insert(contentsOf: "666", at: (string.index(string.endIndex, offsetBy: -1)))
var range = string.index(string.endIndex, offsetBy: -4)..
四、Substring
let greeting = "Hello, world!"
let index1 = greeting.startIndex
let index2 = greeting.firstIndex(of: "o")
let string = greeting[index1..<(index2 ?? greeting.endIndex)]
print(type(of: string))
let string1 = greeting.prefix(1)
let string2 = greeting.suffix(2)
print(type(of: string1))
print(type(of: string2))
let s = String(string1)
print(type(of: s))
打印结果都是Substring,Substring,Substring。String通过下标、prefix、suffix等截取字符串,字符串类型不是string,而是子字符串Substring。Swift 中的子字符串拥有绝大部分字符串所拥有的方法,也就是说你可以用操作字符串相同的方法来操作子字符串。总之,与字符串不同,在字符串上执行动作的话你应该使用子字符串执行短期处理。当你想要把结果保存得长久一点时,你需要把子字符串转换为 String 实例.
五、字符串和字符比较
- 1、使用“等于”运算符 ( ==) 和“不等”运算符 ( !=)进行检查
let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
print("These two strings are considered equal")
}
- 2、前缀和后缀相等性
要检查一个字符串是否拥有特定的字符串前缀或者后缀,调用字符串的 hasPrefix(:)和 hasSuffix(:)方法,它们两个都会接受一个 String 类型的实际参数并且返回一个布尔量值。
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion"
]
var act1SceneCount = 0
for scene in romeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
act1SceneCount += 1
}
}
var act1SceneCount = 0
for scene in romeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
act1SceneCount += 1
}
}