我是靠谱客的博主 友好小蘑菇,最近开发中收集的这篇文章主要介绍iOS开发之Swift篇(3)—— 字符串String版本创建可变字符串字符Character拼接索引/插入/删除截取 (子字符串)插值字符串比较字符串函数字符串运算符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 版本
  • 创建
  • 可变字符串
  • 字符Character
  • 拼接
  • 索引/插入/删除
  • 截取 (子字符串)
  • 插值
  • 字符串比较
  • 字符串函数
  • 字符串运算符

版本

Xcode 11.0
Swift 5.1

创建

两种方法创建:

// 1. 使用字面量
let aa = "aa"
// 2. 通过String实例化
let bb = String(aa)

创建空字符串:

let cc = ""
let dd = String()

多行字符串:

// 单行写法
let ee1 = "line1nline2"
// 多行写法
let ee2 = """
line1
line2
"""

缩进. 从关闭引号(""")所在位置开始算每行的缩进, line1这行会被缩进

let ee3 = """
line1
line2
"""

续行符 ().

let ee4 = """
line1_1 
line1_2
"""
// 实际打印出一行 line1_1 line1_2

可变字符串

在 Objective-C 和 Cocoa 中,需要通过选择两个不同的类(NSString 和 NSMutableString)来指定字符串是否可以被修改。
Swift中, 常量不可被修改, 变量可修改.
可变字符串, 即使用var修饰字符串.

// 可变字符串
var ff = "修改前"
ff = "修改后"
print(ff)
// 打印 修改后

字符Character

// 创建字符
let aChar:Character = "!"
print(aChar)
// 使用字符数组创建字符串
let chars: [Character] = ["A", "p", "p", "l", "e"]
let str = String(chars)
print(str)
// 遍历字符串, 获取每一个字符的值
for character in "Dog!????" {
print(character)
}
// D
// o
// g
// !
// ????

拼接

// 两个字符串直接相加
let gg = "gg"
let hh = "hh"
var ii = gg + hh
print(ii)
// 打印 gghh
// 字符串尾追加字符
let aChar: Character = "!"
ii.append(aChar)
print(ii)
// 打印 gghh!

索引/插入/删除

1. 索引
OC中, 字符串的索引是整数, 可以如下操作:

// 提取字符串:单个,指定位到末尾,开头至指定位置,指定区间
unichar aChar = [str1 characterAtIndex:5];
NSString *str4 = [str1 substringFromIndex:5];
NSString *str5 = [str1 substringToIndex:5];
NSString *str6 = [str1 substringWithRange:NSMakeRange(2, 4)];

Swift中, 字符串的索引不是整数, 而是一个索引类型String.Index。
使用 startIndex 属性可以获取一个 String 的第一个 Character 的索引。使用 endIndex 属性可以获取最后一个 Character 的后一个位置的索引。因此,endIndex 属性不能作为一个字符串的有效下标。如果 String 是空串,startIndex 和 endIndex 是相等的。

let str = "Hello, world"
let startIndex = str.startIndex
let endIndex = str.endIndex
print(startIndex)
// Index(_rawBits: 1)
print(endIndex)
// Index(_rawBits: 786433)

通过调用 String 的 index(before:) 或 index(after:) 方法,可以立即得到前面或后面的一个索引。
也可以通过调用 index(_:offsetBy:) 方法来获取对应偏移量的索引。
还可以通过调用 firstIndex(of:) 方法来获取某个字符第一次出现所对应的索引值

let str = "Hello, world"
let startIndex = str.startIndex
let endIndex = str.endIndex
// 第二个字符索引
let secondIndex = str.index(after: startIndex)
// 最后一个字符索引
let lastIndex = str.index(before: endIndex)
// 从某一索引往前/后偏移(注意偏移值可正可负)多少位所对应的索引 
let customIndex = str.index(startIndex, offsetBy: 5)
// 某一个字符在字符串中的索引
let rIndex = str.firstIndex(of: "r")
// 返回可选类型
// 打印索引对应的字符
print(str[startIndex])
// H
print(str[secondIndex])
// e
print(str[lastIndex])
// d
print(str[customIndex])
// ,
if rIndex != nil {
print(str[rIndex!])
// r
}

遍历索引值:

// 遍历索引值
for index in str.indices {
print("(str[index])", terminator: "")
// 不换行打印
}
// 打印输出 Hello, world

2. 插入

// 插入字符
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome 变量现在等于 "hello!"
// 插入字符串
welcome.insert(contentsOf:" there", at: welcome.index(before: welcome.endIndex))
// welcome 变量现在等于 "hello there!"

3. 删除

// 删除字符
welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome 现在等于 "hello there"
// 删除字符串
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome 现在等于 "hello"

截取 (子字符串)

在前面索引小节中, 我们知道使用数组下标方式可以获取某个index对应的字符:

let str = "Hello, world"
print(str[str.startIndex])
// H

其实也可以使用这种方式来获取字符串.
但是注意, 此时获取到的字符串属于 SubString 类型. Swift 里的 SubString 绝大部分函数都跟 String 一样,意味着你可以使用同样的方式去操作 SubString 和 String。然而, SubString 重用了原 String 的内存空间, 这意味着, 只有在短时间内需要操作字符串时才使用SubString.
为了不给自己找麻烦, 干脆把获取到的SubString直接生成一个新的可全局使用的String比较稳妥:

let str = "Hello, world"
let customIndex = str.index(str.endIndex, offsetBy: -5)
let endIndex = str.endIndex
let tempStr = str[customIndex..<endIndex]
// 返回 SubString 类型实例
print(tempStr)
// 打印输出 world
// 把SubString转化为 String 以便长期存储。
let newStr = String(tempStr)

除了使用数组下标方式, Swift还提供了两种方式来获取字符串的开头部分和结尾部分:

// 获取字符串的前5个字符
let tempStr2 = str.prefix(5)
let newStr2 = String(tempStr2)
// 获取字符串的后5个字符
let tempStr3 = str.suffix(5)
let newStr3 = String(tempStr3)

插值

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

// 插值
var varA
= 20
let constA = 100
var varC:Float = 20.0
var stringA = "(varA) 乘于 (constA) 等于 (varC * 100)"
print( stringA )
// 20 乘于 100 等于 2000.0

字符串比较

// 相等
let aa = "Hello"
let bb = "Hello"
if aa == bb {
print("aa等于bb")
}
// 前缀/后缀
let cc: String = "Hello, world"
if cc.hasPrefix("He") {
print("有前缀He")
}
if cc.hasSuffix("ld") {
print("有后缀ld")
}
// 包含字符
if cc.contains("r") {
print("包含字符r")
}
// 包含字符串 (要导入Foundation)
import Foundation
if cc.contains("llo") {
print("包含字符串llo")
}

字符串函数

isEmpty
判断字符串是否为空,返回布尔值
hasPrefix(prefix: String)
检查字符串是否拥有特定前缀
hasSuffix(suffix: String)
检查字符串是否拥有特定后缀
Int(String)
转换字符串数字为整型
String.count
计算字符串的长度 (Swift 3 版本使用的是 String.characters.count)
utf8
UTF-8 编码
utf16
utf16 编码
unicodeScalars
Unicode 标量编码

字符串运算符

+
连接两个字符串,并返回一个新的字符串
+=
连接操作符两边的字符串并将新字符串赋值给左边的操作符变量
==
判断两个字符串是否相等
<
比较两个字符串,对两个字符串的字母逐一比较
!=
比较两个字符串是否不相等

最后

以上就是友好小蘑菇为你收集整理的iOS开发之Swift篇(3)—— 字符串String版本创建可变字符串字符Character拼接索引/插入/删除截取 (子字符串)插值字符串比较字符串函数字符串运算符的全部内容,希望文章能够帮你解决iOS开发之Swift篇(3)—— 字符串String版本创建可变字符串字符Character拼接索引/插入/删除截取 (子字符串)插值字符串比较字符串函数字符串运算符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部