Swift 字符串和字符(笔记)
2015-12-18 11:39
609 查看
print("Hello, World!")
/**********************字符串和字符*************************/
// 1, NSString是多个Characters
的集合
// 2, 字符串字面量(String Literals)
let someString = "Some string literal value"
// 3, 初始化空字符串
var emptyString =
"" // 空字符串字面量
var anotherEmptyString =
String() // 正常的初始化方法
// 两个字符串均为空并等价
if emptyString.isEmpty {
print("\(emptyString) is empty")
}
// 打印结果 is empty
// 4, 字符串的可变性
var variableString =
"Home"
variableString = "hourse"
print(variableString)
// 5, 字符串是值类型 (Strings Are Value Types)
// 也就是说,字符串在函数/方法传递中是拷贝一份过去,所以可以确保值在传递的时候不变
// 6, 使用字符
for character in
"Dog".characters {
print(character)
}
// 打印结果 D o g
// 直接声明一个 character
let exclamationMark:Character =
"!"
// 字符串可以通过传递一个类型为 Character
的数组作为自变量来初始化
let catCharacter:[Character] = ["C","a","t"]
let catString = String(catCharacter)
print(catString)
// 打印输出为 Cat
// 7, 连接字符串和字符
// 字符串可以通过加法运算符(+)相加在一起(或称"连接")创建一个新的字符串;
let string1 = "hello"
let string2 = " world"
var welecome = string1 +
string2
print(welecome)
// 打印结果是 hello world
// 可以用 +=
拼接在一个已有可变字符串的后面
var string3 = "fuck"
string3 += string2
print(string3)
// 可以用 .append()方法将字符附加到一个字符串变量的后面
// 只能用字符
let char:Character =
"!"
welecome.append(char)
print(welecome)
// 打印结果 hello world!
// 8, 字符串插值( Srring Interpolation)
let multiplier = 3
let message = "\(multiplier) times 2.5 is
\(Double(multiplier)*2.5)"
print(message)
// 结果是 3 times 2.5 is 7.5
// 插值字符串中写在括号内的表达式不能包含非转业反斜杠(\),并且不能包含回车或换行符
// 差值字符串可以包含其他字面量
/*************************9,
标量 Unicode**********************/
// Unicode 是一个国际标准,用于文本的编辑和表示,它使您可以用标准格式表示出来自几乎所有的字符,并能够对文本文件和网页这样的外部资源中的字符进行读写操作
// String和 Charater
类型是完美兼容Unicode的
let eAcute:Character =
"\u{E9}"
print(eAcute)
// 朝鲜语,可以根据语调组合
let precomposed:Character =
"\u{D55C}"
print(precomposed)
// 可以组合
let decomposed:Character =
"\u{1112}\u{1161}\u{11AB}"
print(decomposed)
// 包含记号
let enclosedEAcute:Character =
"\u{E9}\u{20DD}"
print(enclosedEAcute)
// 局部指示符号的标量可以组合成单一的 character
值
let regionallndicatorForUS:Character =
"\u{1F1FA}\u{1F1F8}"
print(regionallndicatorForUS)
// 美国国旗
// 10, 计算字符数量
// 字符串, characters.count
属性
let unusualMenageris = "Koala,snail,Penguin,Dromedary"
print("unusualMenagerie has
\(unusualMenageris.characters.count) characters")
// 打印输出结果unusualMenagerie has 29 characters
// swift 中,使用可扩展的字符串集做为 Character
值来连接或改变字符串时.并不一定会更改字符串的字符数量
// eg
var word = "cate"
print("the number of characters in
\(word) is
\(word.characters.count)")
// count 是 4
word += "\u{301}"
// COMBINING ACUTE ACCENT, U+0301
print("the number of characters in
\(word) is
\(word.characters.count)")
// count 还是 4
// 它是把 e
换成了 é
// 下面这段话有待理解
// “注意:
可扩展的字符群集可以组成一个或者多个 Unicode
标量。这意味着不同的字符以及相同字符的不同表示方式可能需要不同数量的内存空间来存储。所以 Swift
中的字符在一个字符串中并不一定占用相同的内存空间数量。因此在没有获取字符串的可扩展的字符群的范围时候,就不能计算出字符串的字符数量。如果您正在处理一个长字符串,需要注“意characters属性必须遍历全部的
Unicode 标量,来确定字符串的字符数量。
// 另外需要注意的是通过characters属性返回的字符数量并不总是与包含相同字符的NSString的length属性相同。NSString的length属性是利用
UTF-16 表示的十六位代码单元数字,而不是 Unicode
可扩展的字符群集。作为佐证,当一个NSString的length属性被一个Swift的String值访问时,实际上是调用了utf16Count。
/********************* 11,
访问和修改字符串 **********************/
// 同过字符串的属性和方法来访问,或者用下标
let string11 = "I love my wife"
// 不同的字符串占用不同的内存空间,所以要知道 character
的确切位置,就必须从 string
开头遍历出没有个标量直到结尾
// 所以 swift
不能用整数(integer)做索引
// startIndex 获取 String
的第一个 character
的索引!是索引,不是 character
// endIndex 获取 String
的最后一个 character
的索引
// string.index 的 predecessor()
方法,可以得到前面的一个索引
// string.index 的 successor()
方法,可以得到后面一个索引
let character1 =
string11.endIndex
print(character1)
// 任何一个 String
的索引可以通过锁链作用的这些方法获取另一个索引
// 调用 advancedBy(_:)方法 //
初始值往后推到这个方法给的个数
let greeting = "Guten tag!"
var character2 =
greeting[greeting.startIndex]
print(character2)
// G
character2 = greeting[greeting.endIndex.predecessor()]
print(character2)
// !
character2 = greeting[greeting.startIndex.successor()]
print(character2)
// u
character2 = greeting[greeting.startIndex.advancedBy(7)]
print(character2)
// a
// 如果获取值越界,就会报错
// character属性的 indices
属性会创建一个包含全部索引的范围,用来在一个字符串中访问单个字符
for index in
greeting.characters.indices {
print("\(greeting[index])",terminator:"")
if
greeting[index] == greeting[greeting.endIndex.predecessor()]{
print(terminator:"\n")
}
}
// terminator:""作用是不换行!!!!!!!!!!!!!!!!
// 插入和删除
// 调用 insert(_:atIndex:)方法可以在一个字符串的指定索引插入一个"字符"
var welcome = "hello"
welcome.insert("!", atIndex:
welcome.endIndex)
print(welcome)
// hello!
// 调用 insertContentsOf(_:at:)方法可以在一个字符串的指定索引插入一个字符串
welcome.insertContentsOf("there".characters, at:
welcome.endIndex.predecessor())
print(welcome)
// hellorthere!
// 注意,insertContentsOf(_:at:)第一个冒号前面写要插入的字符串点上 characters
// 调用 removeAtIndex(_:)方法删除一个索引的一个字符
welcome.removeAtIndex(greeting.startIndex)
print(welcome)
// ellothere!
// 调用 r
welcome.removeRange(welcome.endIndex.advancedBy(-6)..<welcome.endIndex)
print(welcome)
//ello
// 比较字符串
// 字符串字符相等,前缀相等和后缀相等
// 没啥说的,上例子吧
let quotation = "We're a lot alike, you and I"
let someQuotation = "We're a lot alike, you and I"
if quotation ==
someQuotation {
print("These two things are considered equal")
}
// swift 中,字符串和字符不区分区域
// 前缀和后缀比较 Prefix and Suffix
// 调用 hasPrefix(_:)//hasSuffix
// 俩方法都是传入一个 String
返回一个布尔值
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]
var act1SceneCount =
0
for scene in
romeoAndJuliet {
if scene.hasPrefix("Act 1") {
act1SceneCount++
}
}
print(act1SceneCount)
// 5
var mansionCount =
0
var cellCount = 0
for scene in
romeoAndJuliet {
if scene.hasSuffix("cell") {
cellCount++
}
}
print(cellCount)
// 2
// 字符串的 Unicode
表示形式 (不是太懂,没用过)
// 当一个 Unicode
被写进文本文件或者其他储存时,字符串中的 Unicode
标量会用 Unicode 定义的几种编码.每一个字符串中的小块编码被称为代码单元.包括
UTF8.UTF16.UTF32
let string4 = "aaa"
for everyString in
string4.utf8 {
// print("\(everyString)")
print(everyString)
}
// Unicode 标量表示
// 可以遍历 String
值的 unicodeScalars
属性来访问他的Unicode
// unicodeScalarView是 unicodeScalar
集合
/**********************字符串和字符*************************/
// 1, NSString是多个Characters
的集合
// 2, 字符串字面量(String Literals)
let someString = "Some string literal value"
// 3, 初始化空字符串
var emptyString =
"" // 空字符串字面量
var anotherEmptyString =
String() // 正常的初始化方法
// 两个字符串均为空并等价
if emptyString.isEmpty {
print("\(emptyString) is empty")
}
// 打印结果 is empty
// 4, 字符串的可变性
var variableString =
"Home"
variableString = "hourse"
print(variableString)
// 5, 字符串是值类型 (Strings Are Value Types)
// 也就是说,字符串在函数/方法传递中是拷贝一份过去,所以可以确保值在传递的时候不变
// 6, 使用字符
for character in
"Dog".characters {
print(character)
}
// 打印结果 D o g
// 直接声明一个 character
let exclamationMark:Character =
"!"
// 字符串可以通过传递一个类型为 Character
的数组作为自变量来初始化
let catCharacter:[Character] = ["C","a","t"]
let catString = String(catCharacter)
print(catString)
// 打印输出为 Cat
// 7, 连接字符串和字符
// 字符串可以通过加法运算符(+)相加在一起(或称"连接")创建一个新的字符串;
let string1 = "hello"
let string2 = " world"
var welecome = string1 +
string2
print(welecome)
// 打印结果是 hello world
// 可以用 +=
拼接在一个已有可变字符串的后面
var string3 = "fuck"
string3 += string2
print(string3)
// 可以用 .append()方法将字符附加到一个字符串变量的后面
// 只能用字符
let char:Character =
"!"
welecome.append(char)
print(welecome)
// 打印结果 hello world!
// 8, 字符串插值( Srring Interpolation)
let multiplier = 3
let message = "\(multiplier) times 2.5 is
\(Double(multiplier)*2.5)"
print(message)
// 结果是 3 times 2.5 is 7.5
// 插值字符串中写在括号内的表达式不能包含非转业反斜杠(\),并且不能包含回车或换行符
// 差值字符串可以包含其他字面量
/*************************9,
标量 Unicode**********************/
// Unicode 是一个国际标准,用于文本的编辑和表示,它使您可以用标准格式表示出来自几乎所有的字符,并能够对文本文件和网页这样的外部资源中的字符进行读写操作
// String和 Charater
类型是完美兼容Unicode的
let eAcute:Character =
"\u{E9}"
print(eAcute)
// 朝鲜语,可以根据语调组合
let precomposed:Character =
"\u{D55C}"
print(precomposed)
// 可以组合
let decomposed:Character =
"\u{1112}\u{1161}\u{11AB}"
print(decomposed)
// 包含记号
let enclosedEAcute:Character =
"\u{E9}\u{20DD}"
print(enclosedEAcute)
// 局部指示符号的标量可以组合成单一的 character
值
let regionallndicatorForUS:Character =
"\u{1F1FA}\u{1F1F8}"
print(regionallndicatorForUS)
// 美国国旗
// 10, 计算字符数量
// 字符串, characters.count
属性
let unusualMenageris = "Koala,snail,Penguin,Dromedary"
print("unusualMenagerie has
\(unusualMenageris.characters.count) characters")
// 打印输出结果unusualMenagerie has 29 characters
// swift 中,使用可扩展的字符串集做为 Character
值来连接或改变字符串时.并不一定会更改字符串的字符数量
// eg
var word = "cate"
print("the number of characters in
\(word) is
\(word.characters.count)")
// count 是 4
word += "\u{301}"
// COMBINING ACUTE ACCENT, U+0301
print("the number of characters in
\(word) is
\(word.characters.count)")
// count 还是 4
// 它是把 e
换成了 é
// 下面这段话有待理解
// “注意:
可扩展的字符群集可以组成一个或者多个 Unicode
标量。这意味着不同的字符以及相同字符的不同表示方式可能需要不同数量的内存空间来存储。所以 Swift
中的字符在一个字符串中并不一定占用相同的内存空间数量。因此在没有获取字符串的可扩展的字符群的范围时候,就不能计算出字符串的字符数量。如果您正在处理一个长字符串,需要注“意characters属性必须遍历全部的
Unicode 标量,来确定字符串的字符数量。
// 另外需要注意的是通过characters属性返回的字符数量并不总是与包含相同字符的NSString的length属性相同。NSString的length属性是利用
UTF-16 表示的十六位代码单元数字,而不是 Unicode
可扩展的字符群集。作为佐证,当一个NSString的length属性被一个Swift的String值访问时,实际上是调用了utf16Count。
/********************* 11,
访问和修改字符串 **********************/
// 同过字符串的属性和方法来访问,或者用下标
let string11 = "I love my wife"
// 不同的字符串占用不同的内存空间,所以要知道 character
的确切位置,就必须从 string
开头遍历出没有个标量直到结尾
// 所以 swift
不能用整数(integer)做索引
// startIndex 获取 String
的第一个 character
的索引!是索引,不是 character
// endIndex 获取 String
的最后一个 character
的索引
// string.index 的 predecessor()
方法,可以得到前面的一个索引
// string.index 的 successor()
方法,可以得到后面一个索引
let character1 =
string11.endIndex
print(character1)
// 任何一个 String
的索引可以通过锁链作用的这些方法获取另一个索引
// 调用 advancedBy(_:)方法 //
初始值往后推到这个方法给的个数
let greeting = "Guten tag!"
var character2 =
greeting[greeting.startIndex]
print(character2)
// G
character2 = greeting[greeting.endIndex.predecessor()]
print(character2)
// !
character2 = greeting[greeting.startIndex.successor()]
print(character2)
// u
character2 = greeting[greeting.startIndex.advancedBy(7)]
print(character2)
// a
// 如果获取值越界,就会报错
// character属性的 indices
属性会创建一个包含全部索引的范围,用来在一个字符串中访问单个字符
for index in
greeting.characters.indices {
print("\(greeting[index])",terminator:"")
if
greeting[index] == greeting[greeting.endIndex.predecessor()]{
print(terminator:"\n")
}
}
// terminator:""作用是不换行!!!!!!!!!!!!!!!!
// 插入和删除
// 调用 insert(_:atIndex:)方法可以在一个字符串的指定索引插入一个"字符"
var welcome = "hello"
welcome.insert("!", atIndex:
welcome.endIndex)
print(welcome)
// hello!
// 调用 insertContentsOf(_:at:)方法可以在一个字符串的指定索引插入一个字符串
welcome.insertContentsOf("there".characters, at:
welcome.endIndex.predecessor())
print(welcome)
// hellorthere!
// 注意,insertContentsOf(_:at:)第一个冒号前面写要插入的字符串点上 characters
// 调用 removeAtIndex(_:)方法删除一个索引的一个字符
welcome.removeAtIndex(greeting.startIndex)
print(welcome)
// ellothere!
// 调用 r
welcome.removeRange(welcome.endIndex.advancedBy(-6)..<welcome.endIndex)
print(welcome)
//ello
// 比较字符串
// 字符串字符相等,前缀相等和后缀相等
// 没啥说的,上例子吧
let quotation = "We're a lot alike, you and I"
let someQuotation = "We're a lot alike, you and I"
if quotation ==
someQuotation {
print("These two things are considered equal")
}
// swift 中,字符串和字符不区分区域
// 前缀和后缀比较 Prefix and Suffix
// 调用 hasPrefix(_:)//hasSuffix
// 俩方法都是传入一个 String
返回一个布尔值
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]
var act1SceneCount =
0
for scene in
romeoAndJuliet {
if scene.hasPrefix("Act 1") {
act1SceneCount++
}
}
print(act1SceneCount)
// 5
var mansionCount =
0
var cellCount = 0
for scene in
romeoAndJuliet {
if scene.hasSuffix("cell") {
cellCount++
}
}
print(cellCount)
// 2
// 字符串的 Unicode
表示形式 (不是太懂,没用过)
// 当一个 Unicode
被写进文本文件或者其他储存时,字符串中的 Unicode
标量会用 Unicode 定义的几种编码.每一个字符串中的小块编码被称为代码单元.包括
UTF8.UTF16.UTF32
let string4 = "aaa"
for everyString in
string4.utf8 {
// print("\(everyString)")
print(everyString)
}
// Unicode 标量表示
// 可以遍历 String
值的 unicodeScalars
属性来访问他的Unicode
// unicodeScalarView是 unicodeScalar
集合
相关文章推荐
- IOS UIButton UILabel 等title 添加下划线 swift 版
- swift学习记录(闭包)
- iOS-swift-动画 简单基础的动画摘要-1
- Swift -- 函数的使用(函数作为参数、返回值、嵌套函数)
- swift基本用法-for循环遍历,遍历字典,循环生成数组
- 深入探究Swift数组背后的协议、方法、拓展
- Swift之便利构造函数
- Swift Hello World、 注释、分号
- Swift流程控制之循环语句和判断语句详解
- 怎样在swift中使用cocoapods导入的第三方oc库
- Swift学习笔记1
- 为swift编码引入map()和flatMap(), map those arrays
- 窥探Swift之类的继承与类的访问权限
- Swift语法备注
- Swift Moya
- iOS SDK详解之NSPredicate(Swift)
- swift学习笔记之-方法部分
- Swift与Objc(传统语言)的异同
- swift学习记录(函数--嵌套函数)
- Swift 基本运算符(笔记)