Swift学习之字符串处理

一、连接字符串和字符

String值能够被加起来(或者说连接),使用加运算符( +)来创建新的String值:

var string1 = "我是"
var string2 = "中国人"
let str = string1 + string2
print(str)

使用 String类型的 append()方法来可以将多个 String拼接到一块,也可以给一个 String变量的末尾追加 Character值:

var string1 = "我是"
var string2 = "中国人"
let s1:Character = "q"
let str1 = string1.appending(string2)
string1.append(s1)
print(str1)

二、字符串插值

字符串插值是一种从混合常量、变量、字面量和表达式的字符串字面量构造新 String值的方法

var name = "hlt"
var age = 20
var height = 1.75

let lable = UILabel()
lable.frame = CGRect(x: 100, y: 100, width: 300, height: 40)
lable.backgroundColor = UIColor.red
lable.text = "\(name)是一位年龄\(age)岁,身高\(height)米的中国人"
  • 1、每一个你插入到字符串字面量的元素都要被一对圆括号包裹,然后使用反斜杠前缀。
  • 2、当name等以 \(name)的形式插入到了字符串字面量当中。当字符串插值需要被用来创建真的字符串的时候,这个占位符就会被name的真实值代替。
var name = "hlt"
var age = 20
var height = 1.75

let lable = UILabel()
lable.frame = CGRect(x: 100, y: 100, width: 300, height: 40)
lable.backgroundColor = UIColor.red
lable.text = String(format: "%@是一位年龄%d岁,身高%f米的中国人", name,age,height)
  • 使用 String类型的 format方法直接格式化

三、访问修改字符串

1、索引类型

每一个 String值都有相关的索引类型, String.Index,它相当于每个 Character在字符串中的位置。

  • startIndex : String中第一个 Character的位置
  • endIndex: String中最后一个字符后的位置,也就是比最后一个字符串大于1的位置。
let startIndext:String.Index = string.startIndex
let endIndext:String.Index = string.endIndex
let firstString = string[startIndext]
print(firstString)
输出字符串是a

let endString = string[endIndext]
编译器报越界错误,endIndext并不是字符串下标脚本的合法实际参数。
  • index(before:) : 访问给定索引的前一个
  • index(after:): 访问给定索引的后一个
var string = "abcdefgh"
let str1 = string[string.index(before: string.endIndex)]
let str2 = string[string.index(after: string.startIndex)]
print(str1)
print(str2)
  • index(_:offsetBy:): 访问给定索引的前几个或者后几个,by的值>0后几个,by值<0,后几个
var string = "abcdefgh"

let indext = string.index(string.endIndex, offsetBy: -1)
let indext1 = string.index(string.startIndex, offsetBy: 1)

print(string[indext])
print(string[indext1])

  • firstIndex(of: )根据给定的字符获取第一个索引
var string = "abcdefghhh"
let indext:String.Index = string.firstIndex(of: "h")!
第一个h的索引

2、Range

var string = "abcdefghhh"

let indext1:String.Index = string.firstIndex(of: "b")!
let indext2:String.Index = string.firstIndex(of: "g")!

let rang:Range = indext1..
let rang:Range = indext1.. = indext1...indext2

3、String的插入和删除

  • insert( at: ):插入一个字符
  • string.insert(contentsOf:, at: ):插入一个字符串
import UIKit

var string = "abcdefghhh"

string.insert("1", at: string.startIndex)

string.insert(contentsOf: "666", at: string.endIndex)

string.insert(contentsOf: "666", at: string.firstIndex(of: "d")!)

string.insert(contentsOf: "666", at: string.index(before: string.endIndex))

string.insert(contentsOf: "666", at: string.index(after: string.startIndex))

string.insert(contentsOf: "666", at: (string.index(string.endIndex, offsetBy: -1)))

var range = string.index(string.endIndex, offsetBy: -4)..

四、Substring

let greeting = "Hello, world!"
let index1 =  greeting.startIndex
let index2 =  greeting.firstIndex(of: "o")
let string = greeting[index1..<(index2 ?? greeting.endIndex)]
print(type(of: string))

let string1 = greeting.prefix(1)
let string2 = greeting.suffix(2)
print(type(of: string1))
print(type(of: string2))

let s = String(string1)
print(type(of: s))

打印结果都是Substring,Substring,Substring。String通过下标、prefix、suffix等截取字符串,字符串类型不是string,而是子字符串Substring。Swift 中的子字符串拥有绝大部分字符串所拥有的方法,也就是说你可以用操作字符串相同的方法来操作子字符串。总之,与字符串不同,在字符串上执行动作的话你应该使用子字符串执行短期处理。当你想要把结果保存得长久一点时,你需要把子字符串转换为 String 实例.

五、字符串和字符比较

  • 1、使用“等于”运算符 ( ==) 和“不等”运算符 ( !=)进行检查

let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
    print("These two strings are considered equal")
}
  • 2、前缀和后缀相等性
    要检查一个字符串是否拥有特定的字符串前缀或者后缀,调用字符串的 hasPrefix(:)和 hasSuffix(:)方法,它们两个都会接受一个 String 类型的实际参数并且返回一个布尔量值。
let romeoAndJuliet = [
    "Act 1 Scene 1: Verona, A public place",
    "Act 1 Scene 2: Capulet's mansion"
   ]

var act1SceneCount = 0
for scene in romeoAndJuliet {
    if scene.hasPrefix("Act 1 ") {
        act1SceneCount += 1
    }
}
var act1SceneCount = 0
for scene in romeoAndJuliet {
    if scene.hasPrefix("Act 1 ") {
        act1SceneCount += 1
    }
}

你可能感兴趣的:(Swift学习之字符串处理)