Swift 字符串

来源:互联网 发布:极光推送php文档 编辑:程序博客网 时间:2024/06/03 07:33

一、定义

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   = 20let constA = 100var varC: Float = 20.0 var stringA = "\(varA) 乘于 \(constA) 等于 \(varC * 100)"print( stringA )

输出结果:

20 乘于 100 等于 2000.0

5、字符串连接

字符串可以通过 + 号来连接,实例如下:

let stringA = "该字符串"let stringB = "是可以这样被连接的"let stringC = stringA + stringBprint( 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.countprint( "\"\(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.endIndexwelcome.removeSubrange(range01)print(welcome)let range02 = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndexwelcome.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)

输出结果:

helloworld!helloworld there!helloworld therehelloworldhello!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)}

输出结果:

字符遍历xiao,whereareyoufrom?unicode遍历xiao,whereareyoufrom?

五、获取字符串长度

// 计算字符串的宽度,高度let string: String = "swift中计算字符串的宽度和高度。swift中计算字符串的宽度和高度。swift中计算字符串的宽度和高度。"let font: UIFont = UIFont.systemFont(ofSize: 12)let attributes = [NSFontAttributeName: font]let option = NSStringDrawingOptions.usesLineFragmentOriginlet 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)
原创粉丝点击