字符和字符串
基本概念
Swift 的字符是一个单一的字符字符串字面量,数据类型为 Character。
Swift 的字符串用 String类型来表示。 String的内容可以通过各种方法来访问到,包括作为 Character值的集合。
字符和字符串的声明放在双引号("")中。
例如:
// 字符串
let greeting = "Hello!" // 自动推断为String 类型
let chr1: Character = "中" // 字符类型Character
let chr2 = "Z" // 如果不显示指定,自动推断为String类型
//以下声明无效, 非单一的字符
//let chr3: Character = "ABC"
Swift 的 String类型是一种值类型。
如果你创建了一个新的 String值, String值在传递给方法或者函数的时候会被复制过去,还有赋值给常量或者变量的时候也是一样。每一次赋值和传递,现存的 String值都会被复制一次,传递走的是拷贝而不是原本。
字符串插值
即在字符串字面量中直接注入一个表达式。
语法是:
\(value)
例如:
let num1 = 10
let num2 = "\(num1)" // 10
let num3 = "\(10+10)" // 20
let sum = "num2 + num3 = \(Int(num2)!+Int(num3)!)"
print(sum) // 输出:num2 + num3 = 30
字符串拼接
Swift可以通过+,+= 或append() 方法拼接字符串。
var str1 = "Hello"
var str2 = "World"
var str3 = str1 + " " + str2
print(str3) // 输出:Hello World
str3 += " !"
print(str3) //输出: Hello World !
str1.append(" Swift")
print(str1) // 输出:Hello Swift
var strArr = ["Hello","Swift"]
var str4 = strArr.joined()
print(str4) // 输出:HelloSwift
var str5 = strArr.joined(separator: "-")
print(str5) //输出:Hello-Swift
注意:
-
+= 和 append 会改变原有字符串,因此必须是可变的(即var 声明的)
-
joined默认的分隔符是空字符串。
字符串比较
if str5.isEmpty {
print("st5 is Empty")
}else {
print("st5 is not Empty")
}
// 输出:st5 is not Empty
let result = str5.isEmpty ? "str5 is empty" : str5
print(result) // 输出:Hello-Swift
"abc" == "abc"
"abc" == "ABC"
"abc" == "efg"
// true
// false
// false
字符串字符遍历
可以通过 for-in循环遍历 String 中的每一个独立的 Character值:
for character in "Swift" {
print(character)
}
//S
//w
//i
//f
//t
分割字符串为数组
let strToArr = "hello swift"
let afterStrToStr1 = strToArr.components(separatedBy: " ")
//["hello", "swift"]
print(afterStrToStr1)
字符串转换为数字类型
Int("100") // 100
Int("abc") // nil,若无法转换,则返回nil
字符统计和索引
要在字符串中取回 Character值的总数,使用字符串的 count属性。
每一个 String值都有相关的索引类型, String.Index,它相当于每个 Character在字符串中的位置。
//字符统计
print("Hello Swift".count) // 11
// 字符索引
let startIndex = "Hello".startIndex
let endIndex = "Hello".endIndex
//Hello's startIndex:Index(_rawBits: 1),and endIndex Index(_rawBits: 327681)
print("Hello's startIndex:\(startIndex),and endIndex \(endIndex)")
print("Hello"[startIndex]) // H
//使用 indices属性来访问字符串中每个字符的索引。
for index in "Hello".indices {
//H e l l o
print("\("Hello"[index]) ", terminator: "")
}
插入和删除
要给字符串的特定索引位置插入字符,使用 insert(_:at:)方法。
要插入另一个字符串的内容到特定的索引,使用 insert(contentsOf:at:) 方法。
要从字符串的特定索引位置移除字符,使用 remove(at:)方法。
要移除一小段特定范围的字符串,使用 removeSubrange(_:) 方法。
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome now equals "hello!"
welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
// welcome now equals "hello there!"
welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome now equals "hello there"
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome now equals "hello"
其他常用方法
// 判断是否以指定字符串开头或结尾
"hello world".hasPrefix("hello") // true
"hello world".hasSuffix("world") // true
// 字符串翻转,字符串本质就是字符的数组,可以直接调用reversed() 方法
let strA = "tfiws olleh"
var reversedStr = String(strA.reversed())
print(reversedStr) // 输出:hello swift
let strWithSpace = " Hello Swift \n"
// 删除空白字符和换行
print(strWithSpace.trimmingCharacters(in: .whitespacesAndNewlines))
//删除空白字符
print(strWithSpace.trimmingCharacters(in: .whitespaces))
//删除换行字符
print(strWithSpace.trimmingCharacters(in: .newlines))
//大小写转换
let abcd = "heLLo Swift"
let uppercaseStr = abcd.uppercased() // "HELLO SWIFT"
let lowercaseStr = abcd.lowercased() // "hello swift"
let capitalizedStr = abcd.capitalized //Hello Swift