Swift学习-字符串(三)

发现有些教程比较老了,跟不上时代了,导致代码无法运行。最新的swift2.0版本,从这章与时俱进开始学习2.0Xcode需要更新到V7.0OS X需要更新到V10.10.4以上。

字符串字面量

字符串字面量是由双引号包裹着的具有固定顺序的文本字符集。

let someString = “Some string value”

var someString = “Some value”

Ø  字符串字面量可以包含以下特殊字符

转移特殊字符 \0 (空字符)、\\(反斜线)、\t (水平制表符)、\n (换行符)、\r (回车符)、\" (双引号)、\' (单引号)。

Unicode标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。

Let wiseWords = “\”我要成为海贼王的男人\”-路飞”

let dollarSign = "\u{24}"// $, Unicode标量 U+0024

let blackHeart = "\u{2665}"// ♥, Unicode标量 U+2665

let sparklingHeart = "\u{1F496}"// Unicode 标量 U+1F496

初始化空字符串

var emptyString = “”//空字符串字面量

varanotherEmptyString = String()//初始化String实例

//两个字符串均为空并等价

检查字符串是否为空

ifemptyString.isEmpty

{

Print(“字符串为空”)
}

 注:Swift2.0 print()函数取代了之前版本的println()函数

字符串是值类型

Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值,其明确了无论该值来自于哪里,都是您独自拥有的。您可以放心您传递的字符串本身不会被更改。

字符(Characters)

Swift 的 String 类型表示特定序列的字符值的集合。每一个字符值代表一个 Unicode 字符。您可利用 for-in 循环来遍历字符串中中的characters属性来获取每一个字符的值:

for character in"Dog!".characters {

    println(character)

}

// D

// o

// g

// !

Ø  声明单字符常量或变量

let sign:Character =“s”

var signAnother:Character= “t”

字符串可以通过传递一个值类型为Character的数组作为自变量来初始化:

let catCharacters: [Character] = ["C", "a", "t", "!"]

let catString = String(catCharacters)

print(catString) // 打印输出:"Cat!"

连接字符串

用“+”,“+=”,使用append()方法将一个字符加到字符串变量的尾部

var welcome = “welcome”

let ex:Character = “!”

welcome.append(ex);

println(“welcome:\(welcome)”)

//输出:welcome:welcome!

注意:
您不能将一个字符串或者字符添加到一个已经存在的字符变量上,因为字符变量只能包含一个字符。

字符串插值 (String Interpolation)

写法:反斜线+(常量、变量、字面量和表达式)

let  exp = 2

println(“\(exp)”)

//输出:2

Unicode

Unicode 是一个国际标准,用于文本的编码和表示。 它使您可以用标准格式表示来自任意语言几乎所有的字符,并能够对文本文件或网页这样的外部资源中的字符进行读写操作。 Swift StringCharacter类型是完全兼容 Unicode 标准的。

可扩展字符群集

每一个 SwiftCharacter类型代表一个可扩展的字形群。 一个可扩展的字形群是一个或多个可生成人类可读的字符 Unicode 标量的有序排列。

let eacute:Character= “u{E9}”

letcombinedEacute:Character = “u{65}\u{301}”

print(eacute,combinedEacute,eacute == combinedEacute)

//输出:é,é, true

计算字符数量 (Counting Characters)

使用字符串的characters属性的count属性获得

var word = “cafe”

println(“word hascharacters:\(word.characters.count)”)

//输出:4

在 Swift 中,使用可拓展的字符群集作为Character值来连接或改变字符串时,并不一定会更改字符串的字符数量。

word += “u{301}”

print(word,word.characters.count)

//输出:café,4

字符串索引 (String Indices)

Ø  特点

1)   每一个String值都有一个关联的索引(index)类型,String.Index来对应字符串中每一个字符的位置

2)   Swift 的字符串不能用整数(integer)做索引

3)   用属性startIndex获取第一个字符的索引,endIndex获取最后一个字符的后一个位置的索引,所以endIndex不是有效下标。如果字符串为空,则startIndex和endIndex相等。

4)   通过调用String.Indexpredecessor()方法,可以立即得到前面一个索引,调用successor()方法可以立即得到后面一个索引。任何一个String的索引都可以通过锁链作用的这些方法来获取另一个索引,也可以调用advancedBy(_:)方法来获取。但如果尝试获取出界的字符串索引,就会抛出一个运行时错误。

Ø  例子

let greeting = “Guten Tag!”

var g = greeting[greeting.startIndex]

print(g) //G greeting.startIndex的类型为Index

g = greeting[greeting.endIndex.predecessor()]

print(g)// !  

g = greeting[greeting.startIndex.successor()]

print(g)// u  

let index =  greeting.startIndex.advancedBy(7)

print(index,greeting[index]) //7  a

Ø  使用characters属性的indices属性会创建一个包含全部索引的范围(Range),用来在一个字符串中访问单个字符。

for index in greeting.characters.indices{

   print("\(greeting[index]) ",terminator: "")

}

//输出"G u t e n   T a g !" (greeting[index])后面有个空格,不然打印不出来

插入与删除

字符串的指定索引插入一个字符: insert(newElement:Character,atIndex:Index)

 var welcome = "hello"

welcome.insert("!",atIndex: welcome.endIndex)

字符串的指定索引插入一个字符串: insertContentOf(newElements:S,at:Index)

welcome.insertContentsOf("there".characters,at:welcome.endIndex.predecessor)) // welcome 现在等于 "hello there!"

字符串的指定索引删除一个字符:removeAtIndex(i:Index)

welcome.removeAtIndex(welcome.endIndex.predecessor())

print(welcome) // hello theres

字符串的指定索引删除一个子字符串:removeRange(subRange:Range<Index>)

参数需要传入一个类型为Index的索引范围

let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex

welcome.removeRange(range)

print(welcome) //hello

比较字符串 (Comparing Strings)

三种比较方式:字符串相等,前缀相等,后缀相等

1)  字符串/字符相等

使用"=="和"!="比较,如果两个字符串(或者两个字符)的可扩展的字形群集是标准相等的,那就认为它们是相等的。

let quotation = "We're a lotalike, you and I."

let sameQuotation = "We're a lotalike, you and I."

if quotation == sameQuotation

{

print("These two strings are considered equal")

 }

2)   前缀相等

方法:hasPrefix(prefix:String):Bool

var str = “helloswift

print(str.hasPrefix(“hello”))

//输出:true

3)  后缀相等

方法:hasSuffix(suffix:String):Bool

var str = “helloswift

print(str.hasSuffix (“swift”))

//输出:true

字符串的 Unicode 表示形式

三种 Unicode 兼容的方式访问字符串的值:

1)  UTF-8 代码单元集合 (利用字符串的utf8属性进行访问)

          var dogStr = “dog!!

for codeUnit in dogStr.utf8 {

print("\(codeUnit) ", terminator: "")

}

//68111 103 226 128 188 

2)  UTF-16 代码单元集合 (利用字符串的utf16属性进行访问)

for codeUnit in dogStr.utf16 {

print("\(codeUnit) ", terminator: "")

 }

// 68111 103 8252 

3)  21位的Unicode 标量值集合,也就是字符串的 UTF-32 编码格式 (利用字符串的unicodeScalars属性进行访问)

for scalar in dogString.unicodeScalars {

print("\(scalar) ")

}

// D

// o

// g

// ‼


 


你可能感兴趣的:(字符串,swift)