一、定义
1、创建字符串
//使用字符串字面量
var stringA = "Hello, World!"
print( stringA )
//String 实例化
var stringB = String("Hello, World!")
print( stringB )
输出结果
Hello, World!
Hello, World!
2、空字符串
// 使用字符串字面量创建空字符串
var stringA = ""
if stringA.isEmpty {
print( "stringA 是空的" )
} else {
print( "stringA 不是空的" )
}
// 实例化 String 类来创建空字符串
let stringB = String()
if stringB.isEmpty {
print( "stringB 是空的" )
} else {
print( "stringB 不是空的" )
}
输出结果
stringA 是空的
stringB 是空的
3、字符串常量
// stringA 可被修改
var stringA = "该字符串:"
stringA += "可以被修改!!!"
print( stringA )
// stringB 不能修改
let stringB = String("该字符串:")
//stringB += "不可以被修改!!!"
print( stringB )
输出结果:
该字符串:可以被修改!!!
Optional("该字符串:")
4、字符串中插入值
字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:
var varA = 20
let constA = 100
var varC: Float = 20.0
var stringA = "\(varA) 乘于 \(constA) 等于 \(varC * 100)"
print( stringA )
输出结果:
20 乘于 100 等于 2000.0
5、字符串连接
字符串可以通过 + 号来连接,实例如下:
let stringA = "该字符串"
let stringB = "是可以这样被连接的"
let stringC = stringA + stringB
print( stringC )
输出结果:
该字符串是可以这样被连接的
6、Unicode 字符串
Unicode 是一个国际标准,用于文本的编码,Swift 的 String 类型是基于 Unicode建立的。你可以循环迭代出字符串中 UTF-8 与 UTF-16 的编码,实例如下:
var unicodeString = "看,这是我的UTF"
print("UTF-8 编码: ")
for code in unicodeString.utf8 {
print("\(code) ")
}
print("\n")
print("UTF-16 编码: ")
for code in unicodeString.utf16 {
print("\(code) ")
}
输出结果:
UTF-8 编码:
231
156
139
239
188
140
232
191
153
230
152
175
230
136
145
231
154
132
85
84
70
UTF-16 编码:
30475
65292
36825
26159
25105
30340
85
84
70
二、字符串函数及运算符
1、字符串长度
字符串长度使用 String.characters.count 属性来计算,实例如下:
let stringA = "你想知道我的长度吗,那就试一下吧!!!"
let count = stringA.characters.count
print( "\"\(stringA)\"长度为 \(count)" )
输出结果:
"你想知道我的长度吗,那就试一下吧!!!"长度为 19
2、字符串比较
(1)==
你可以使用 == 来比较两个字符串是否相等:
let varA = "Hello, Swift!"
let varB = "Hello, World!"
if varA == varB {
print( "\(varA) 与 \(varB) 是相等的" )
} else {
print( "\(varA) 与 \(varB) 是不相等的" )
}
输出结果:
Hello, Swift! 与 Hello, World! 是不相等的
(2)、!=
比较两个字符串是否不相等。
let varA = "Hello, Swift!"
let varB = "Hello, World!"
if varA != varB {
print( "\(varA) 与 \(varB) 是不相等的" )
} else {
print( "\(varA) 与 \(varB) 是相等的" )
}
输出结果:
Hello, Swift! 与 Hello, World! 是不相等的
(3)、< 与 >
比较两个字符串,对两个字符串的字母逐一比较。
let varA = "Hello, Swift!"
let varB = "Hello, World!"
if varA > varB {
print( "\(varA) 字符串大于 \(varB) " )
} else {
print( "\(varA) 字符串不大于 \(varB)" )
}
if varA < varB {
print( "\(varA) 字符串小于 \(varB) " )
} else {
print( "\(varA) 字符串小大于 \(varB)" )
}
输出结果:
Hello, Swift! 字符串不大于 Hello, World!
Hello, Swift! 字符串小于 Hello, World!
3、前缀和后缀
(1)字符串前缀hasPrefix
let name = "Hello,world!"
if name.hasPrefix("Hello") {
print("有对应的 Hello 前缀")
} else {
print("没有对应的 Hello 前缀")
}
输出结果:
有对应的 Hello 前缀
(2)、字符串后缀hasSuffix
let name = "Hello,world!"
if name.hasSuffix("!") {
print("有对应的 ! 后缀")
} else {
print("没有对应的 ! 后缀")
}
输出结果:
有对应的 ! 后缀
4、字符串大小写转换
(1)、字符串小写转换大写
var name = "Hello,world!"
name = name.uppercased()
输出结果:
HELLO,WORLD!
(2)、字符串大写转换小写
var name = "Hello,world!"
name = name.lowercased()
输出结果:
hello,world!
5、访问和修改字符串
每个String值都有一个关联的索引(index)类型,String.index,它对应着字符串中的每一个Character的位置
(1)、字符串索引
- (1)、startIndex:获取一个Stirng的第一个Character的索引;
- (2)、endIndex:获取一个String的最后一个Character的后一个位置的索引。因此改属性不能作为一个字符串的有效下标。注意:如果String是空串,startIndex和endIndex是相等的;
- (3)、index(before:):可以立即得到index前面的一个索引
- (4)、index(after:):可以立即得到index后面的一个索引
let greeting = "Hello,world!"
print("第一个字符是:\(greeting[greeting.startIndex])")
print("最后一个字符是:\(greeting[greeting.index(before: greeting.endIndex)])")
print("第二个字符是:\(greeting[greeting.index(greeting.startIndex, offsetBy: 1)])")
print("倒数第二个字符是:\(greeting[greeting.index(greeting.startIndex, offsetBy: greeting.characters.count - 2)])")
输出结果:
第一个字符是:H
最后一个字符是:!
第二个字符是:e
倒数第二个字符是:d
(2)、插入、删除、替换
- (1)、insert(_:at:):可以在一个字符串的指定索引插入一个字符
- (2)、insert(contentsOf:at:):可以在一个字符串的指定索引插入一个段字符串
- (3)、remove(at:):可以在一个字符串的指定索引删除一个字符
- (4)、removeSubrange(_:):可以在一个字符串的指定索引删除一个子字符串
- (5)、replaceSubrange(_: with:):可以在一个字符串的指定索引替换一个字符串
- (6)、replacingOccurrences(of: with:):将一个字符串中的固定字符串替换成其他字符串
- (7)、replacingOccurrences(of: with: options: range:):将一个字符串中的固定字符串替换成其他字符串,可选择String.CompareOptions选项,例如忽略大小写字母。
var welcome = "hello,world"
welcome.insert("!", at: welcome.endIndex)
print(welcome)
welcome.insert(contentsOf: " there".characters, at: welcome.index(before: welcome.endIndex))
print(welcome)
welcome.remove(at: welcome.index(before: welcome.endIndex))
print(welcome)
let range01 = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range01)
print(welcome)
let range02 = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.replaceSubrange(range02, with: "!")
print(welcome)
welcome = welcome.replacingOccurrences(of: "hello", with: "world")
print(welcome)
welcome = welcome.replacingOccurrences(of: "WORLD", with: "HELLO", options: String.CompareOptions.caseInsensitive, range: nil)
print(welcome)
输出结果:
hello,world!
hello,world there!
hello,world there
hello,world
hello!
world!
HELLO!
6、去字符串前后多余的固定字符
(1)、删除前后多余的空格
let name01 = " hello world! "
print(name01)
let name02 = name01.trimmingCharacters(in: CharacterSet.whitespaces)
print(name02)
输出结果:
hello world!
hello world!
(2)、删除前后指定的字符
let str1 = "...<<hangge.com>>..."
//删除前后<>
let characterSet = CharacterSet(charactersIn: "<>.")
let str2 = str1.trimmingCharacters(in: characterSet)
//打印结果
print("原字符串:\(str1)")
print("新字符串:\(str2)")
输出结果:
原字符串:...<<hangge.com>>...
新字符串:hangge.com
CharacterSet 里各个枚举类型的含义如下:
controlCharacters:控制符
whitespaces:空格
newlines:换行符
whitespacesAndNewlines:空格换行
decimalDigits:小数
letters:文字
lowercaseLetters:小写字母
uppercaseLetters:大写字母
nonBaseCharacters:非基础
alphanumerics:字母数字
decomposables:可分解
illegalCharacters:非法
punctuationCharacters:标点
capitalizedLetters:大写
symbols:符号
三、数据类型转换
1、转换成基本类型
(1)、String->Int
let stringInt = "123"
print(Int(stringInt) ?? "0")
输出结果:
123
(2)、String->Float
let stringFloat = "123"
print(Float(stringFloat) ?? "0.00")
输出结果:
123.0
(3)、String->Double
let stringDouble = "123"
print(Double(stringDouble) ?? "0.00")
输出结果:
123.0
(4)、String->Bool
let stringBool = "true"
print(Bool(stringBool) ?? false)
输出结果:
true
2、String->Array
let names = "boy,girl,man,woman"
let nameArr = names.components(separatedBy: ",")
print(nameArr)
let counts = "1,2,3,4,5,6.7.8.9"
let characters = CharacterSet.init(charactersIn: ",.")
let countArr = counts.components(separatedBy: characters)
print(countArr)
输出结果:
["boy", "girl", "man", "woman"]
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
3、String->Data
let dataStr = "String to encode data"
let data = dataStr.data(using: .utf8)
四、遍历
let name = "xiao, where are you from?"
print("字符遍历")
for char in name.characters {
print(char)
}
print("unicode遍历")
for code in name.unicodeScalars {
print(code)
}
输出结果:
字符遍历
x
i
a
o
,
w
h
e
r
e
a
r
e
y
o
u
f
r
o
m
?
unicode遍历
x
i
a
o
,
w
h
e
r
e
a
r
e
y
o
u
f
r
o
m
?
五、获取字符串长度
// 计算字符串的宽度,高度
let string: String = "swift中计算字符串的宽度和高度。swift中计算字符串的宽度和高度。swift中计算字符串的宽度和高度。"
let font: UIFont = UIFont.systemFont(ofSize: 12)
let attributes = [NSFontAttributeName: font]
let option = NSStringDrawingOptions.usesLineFragmentOrigin
let rect:CGRect = string.boundingRect(with: CGSize(width: 100, height: 999), options: option, attributes: attributes, context: nil)
print("rect:\(rect)")
输出:
rect:(0.0, 0.0, 98.016, 85.921875)