美文网首页
Swift3.1_字符串

Swift3.1_字符串

作者: Carson_Zhu | 来源:发表于2018-02-20 18:49 被阅读12次

字符串字面量

您可以在您的代码中包含一段预定义的字符串值作为字符串字面量。字符串字面量是由双引号""包裹着的具有固定顺序的文本字符集。 字符串字面量可以用于为常量和变量提供初始值:

let someString = "Some string literal value"

someString常量通过字符串字面量进行初始化,Swift会推断该常量为String类型。

初始化空字符串

要创建一个空字符串作为初始值,可以将空的字符串字面量赋值给变量,也可以初始化一个新的String实例:

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法

判断该字符串是否为空:

print(emptyString.isEmpty)    // true

字符串可变性

您可以通过将一个特定字符串分配给一个变量来对其进行修改,或者分配给一个常量来保证其不会被修改

var variableString = "hello"
variableString += " world"
// variableString 现在为 "hello world"

let constantString = "hello"
constantString += " world"
// 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。

字符串是值类型

String的定义就是一个结构体,结构体是值类型。在Swift中struct和class的区别中进行了详细描述。

public struct String {
  ...
}

如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数、方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。

var str1 = "hello"
var str2 = str1
str2 = "hello world"
print("str1: "+str1+"  str2: "+str2)
// str1: hello  str2: hello world

字符

Swift中用characters表示字符。

for character in "Dog".characters {
    print(character)
}
// D
// o
// g

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

let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)    // "Cat!🐱"

还可以判断字符串是否包含字符:

catString.contains("a")    // true

获取字符个数:

catString.characters.count    // 5

连接字符串和字符

通过加法运算符+连接在一起创建一个新的字符串:

let string1 = "hello"
let string2 = " world"
let welcome = string1 + string2    // welcome 现在等于 "hello world"

通过加法赋值运算符+=将一个字符串添加到一个已经存在字符串变量上:

var string = "hello"
string += " world"    // string 现在等于 "hello world"

append()方法将一个字符附加到一个字符串变量的尾部:

var string = "hello world"
let ch: Character = "!"
string.append(ch)    // string 现在等于 "hello world!"
string.append("...") // string 现在等于 "hello world!..."

字符串插值

字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message 是 "3 times 2.5 is 7.5"

注意:
插值字符串中写在括号中的表达式不能包含非转义反斜杠\,并且不能包含回车或换行符。不过,插值字符串可以包含其他字面量。

Unicode

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

Unicode 标量

SwiftString类型是基于Unicode标量建立的。Unicode标量是对应字符或者修饰符的唯一的21位数字,注意不是所有的21Unicode标量都代表一个字符,因为有一些标量是留作未来分配的。

字符串字面量的特殊字符

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

  • 转义字符
    空字符\0、反斜线\\、水平制表符\t、换行符\n、回车符\r、双引号\"、单引号\'
  • Unicode标量
    写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的Unicode位码。
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imageination is more important than knowledge" - Enistein
let dollarSign = "\u{24}"             // $, Unicode 标量 U+0024
let blackHeart = "\u{2665}"           // ♥, Unicode 标量 U+2665
let sparklingHeart = "\u{1F496}"      // 💖, Unicode 标量 U+1F496

访问字符串

每一个String值都有一个关联的索引index类型,String.Index它对应着字符串中的每一个Character的位置。

  • 第一个索引
    let string = "hello world"
    let start = string.startIndex    // String.Index 类型
    string[start]                    // 结果 h
    
  • 最后一个索引
    使用endIndex属性可以获取最后一个Character的后一个位置的索引。因此,endIndex属性不能作为一个字符串的有效下标。
    string[string.endIndex]       // 越界错误 
    string.index(after: endIndex) // 越界错误 
    
  • 索引
    通过上一个索引和下一个索引获取对应索引:
    string[string.index(after: string.startIndex)] // 第二个 e
    string[string.index(before: string.endIndex)]  // 最后一个字符 d
    
    通过偏移量获取对应的索引:
    let index = string.index(string.startIndex, offsetBy: 4)
    string[index]    // o
    
  • 根据字符获取索引
    let index = string.index(of: "w")
    

修改字符串

插入
var welcome = "hello"

welcome.insert("!", at: welcome.endIndex)
// welcome 变量现在等于 "hello!"

welcome.insert(contentsOf:" world".characters, at: welcome.index(before: welcome.endIndex))
// welcome 变量现在等于 "hello world!"
删除
welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome 现在等于 "hello world"

let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome 现在等于 "hello"
替换
var welcome = "hello world"
let range = welcome.index(welcome.startIndex, offsetBy: 6)..< welcome.endIndex
welcome.replaceSubrange(range, with: "Swift")
// welcome 现在等于 "hello Swift"

前缀、后缀相等

let string = "hello world"
string.hasPrefix("a")    // false
string.hasSuffix("d")    // true

大小写切换

string.lowercased()
string.uppercased()

字符串转数组

let string = "a,b,c,d"
string.components(separatedBy: ",")    // ["a", "b", "c", "d"]

相关文章

  • Swift3.1_字符串

    字符串字面量 您可以在您的代码中包含一段预定义的字符串值作为字符串字面量。字符串字面量是由双引号""包裹着的具有固...

  • Swift3.1_基础

    常量和变量 常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。 常量声明必须含有初始值,且不可修...

  • Swift3.1_枚举

    枚举 定义和使用 使用enum关键词来创建枚举并且把它们的整个定义放在一对大括号内,使用case关键字来定义一个新...

  • Swift3.1_协议

    简介 规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体或枚举都可以遵循协议,并为协议...

  • Swift3.1_扩展

    扩展 就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能,但是不能重写已有的功能。 Swift中的扩展可以...

  • Swift3.1_继承

    简介 一个类可以继承另一个类的方法,属性和其它特性。当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类)。...

  • Swift3.1_集合类型

    集合类型的可变性 集合类型的可变性取决于声明为let还是var,let声明的集合类型是不可变的,它的大小和内容都不...

  • Swift3.1_控制流

    For-In 循环 你可以使用for-in循环来遍历一个集合中的所有元素,例如数组中的元素、数字范围或者字符串中的...

  • Swift3.1_泛型

    类型参数 占位类型T是类型参数的一个例子。类型参数指定并命名一个占位类型,并且紧随在函数名后面,使用一对尖括号括起...

  • Swift3.1_运算符

    基本运算符 术语 一元运算符对单一操作对象操作(-a)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作...

网友评论

      本文标题:Swift3.1_字符串

      本文链接:https://www.haomeiwen.com/subject/gfvgtftx.html