//1.字符串的拼接
let str1 = "world"
var str2 = "hello" + str1
str2 += ",又加了字符串"
str2.append("ddddd")
print("字符串的拼接:\(str2)")
//2.多行字符串的写法:用三引号包裹
let quotation = """
张三: "你在哪"
李四: "家里蹲"
"""
let largStr = """
如果你想换行,以便加强代码的可读性,但是你又不想在你的多行字符串字面量中出现换行符的话,\
你可以用在行尾写一个反斜杠作为续行符。
如果不加反斜杠换行的话,结果就会有一个换行符
"""
let lineBreaks = """
为了让一个多行字符串字面量开始和结束于换行符
请将换行写在第一行和最后一行
"""
//多行字符串的拼接
let moreOne = """
one
two
"""
let moreTwo = """
one
two
"""
let moreThree = """
three
"""
print("没有换行符,拼接后也没有换行:\(moreOne + moreThree)")
print("有换行符,拼接的会折行显示:\(moreTwo + moreThree)")
//3.转义字符:\0(空字符)、\\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、\"(双引号)、\'(单引号)
//4.Unicode标量:\u{n} n为任意1~8位的十六进制数,而且可以用Unicode位码
let wiseWords = "\"吃饭了吗?\",有人问"
let dollar = "\u{24}"//美元符号
let blackHeart = "\u{2665}"//黑色的心
let redHeart = "\u{1F496}"//红色的心
//4.字符串是否为空
var str3 = ""
if str3.isEmpty {
print("字符串没有值")
}
//5.字符串是值类型,会进行值拷贝,字符串传递过程中不会被修改,除非是你自己改的
//6.字符串的遍历
for str in "Hello World!🐶" {
print("遍历字符串获取每一个字符的值:\(str)")
}
//7.字符串的字符
let exclamation: Character = "!"
print("通过Character 来修饰的字符串 赋值 时不能为空、也不能超过两个字符,只能是一个字符")
let catCharArr:[Character] = ["C","a","t"] //字符数组
let catStr = String(catCharArr)
print("字符数组转字符串:\(catStr)")
let eAcute: Character = "\u{E9}" //é
let combined: Character = "\u{65}\u{301}" //é 只不过是一个字母e和一个重音符合组合成的,可以组合一些复杂的字符
print("可扩展字形群集:\(eAcute)、\(combined)")
var cafeStr = "cafe"
print("字符串中字符的数量:\(cafeStr.count)")
cafeStr += "\u{301}"
print("字符串中字符的数量:\(cafeStr.count),因为把e变成了é,所以数量不变")
//字符串中由于可能有Unicode标量,所以并不是每一个字符都占用相同的内存空间
//8.字符串索引:字符串可以通过索引来获取某个字符
let greeting = "我是一个字符串,用来测试索引"
greeting[greeting.startIndex]//开始处--"我"
greeting[greeting.index(after: greeting.startIndex)]//**index之后的 --"是"
greeting[greeting.index(before: greeting.endIndex)]//**index之前的 --"引"
let index = greeting.index(greeting.startIndex, offsetBy: 5)//**index偏移5
greeting[index] //--"符"
for index in greeting.indices{ //indices属性相当于是该字符串的全部范围
print("遍历这个字符串:\(greeting[index])")
}
//9.字符串的插入和删除
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)//在字符串后插入"!"
welcome.insert(contentsOf: "视界", at: welcome.index(before: welcome.endIndex))//在结束字符前插入
print("字符串插入结果:\(welcome)")
welcome.remove(at: welcome.index(before: welcome.endIndex))//移除结束的那个字符
let removeRange = welcome.index(welcome.endIndex, offsetBy: -2)..<welcome.endIndex // 最后2个字符
welcome.removeSubrange(removeRange)//移除最后两个字符
//10.子字符串
let subStr = "Hello, world!"
let subIndex = subStr.index(of: ",") ?? greeting.endIndex//相当于分割含","前的字符串范围
let begStr = subStr[..<subIndex] //“Hello” bgeStr是SubStr的子字符串,它的内存空间是SubStr内存空间的一部分
let newStr = String(begStr)//newStr才是一个字符串,有自己独立的内存空间
//11.字符串比较
//是否相等 == 、 !=
let hasStr = "第一章:大大"
if hasStr.hasPrefix("第一章") {
print("字符串前缀包含 第一章 ")
}
if hasStr.hasSuffix("大") {
print("字符串后缀包含 大")
}
//字符串的Unicode表示形式
let dogStr = "Dog‼🐶"
//UTF-8表示
for codeUnit in dogStr.utf8 {
print("utf8表示的字符串:\(codeUnit)") //Dog:(68, 111, 103) ‼:(226, 128, 188) 🐶:(240, 159, 144, 182)
}
//UTF-16表示
for codeUnit in dogStr.utf16 {
print("utf16表示的字符串:\(codeUnit)") //Dog:(68, 111, 103) ‼:(8252) 🐶:(55357,56374)
}
for codeUnit in dogStr.unicodeScalars{//jieguo 21位的 Unicode 代码点,value用UInt32来表示
print("UnicodeScalar遍历结果:\(codeUnit) 对应 \(codeUnit.value)")//Dog:(68,111,103) ‼:8252 🐶:128054
}
网友评论