美文网首页Swift5.1语法学习
三、字符串、字符

三、字符串、字符

作者: 爱玩游戏的iOS菜鸟 | 来源:发表于2019-12-31 12:34 被阅读0次

字符串的定义

  • 字符串是一系列的字符 比如"hello" 。Swift有String来表示字符串,String类型可以通过各种方式来访问字符串,包括作为Character的集合
  • Swift 的 String和 Character 类型提供了一种快速的符合 Unicode 的方式操作,每一个字符串都是由 Unicode 字符的独立编码组成
字符串字面量
  • 被双引号( ")包裹的固定顺序文本字符,用字符串字面量作为常量或者变量的初始值
    【注意】
  1. 多行字符串字面量里包含了换行,那个换行符(\n)同样会成为字符串里的值,如果不需要换行符在末尾添加(\)
var string = """
abcdefg\
hijklmn
"""

print(string)//输出:abcdefghijklmn 无换行
  1. 多行字符串可以缩进以匹配周围的代码
func function() ->String{
    let string = """
    abcdefg
    hijklmn
        opqrst
    uvw
        xyz
    """
    return string
}
print(function())
/*
输出结果:
abcdefg
hijklmn
 opqrst
uvw
 xyz
 */
字符串中的特殊字符
  • 转义字符 \0 (空字符) \ (反斜杠) \t (水平制表符)\n (换行符) \r(回车符) "(双引号) '(单引号)
  • 任意的Unicode标量 \u{n},n是一个1-8位合法的Unico的码位相等的16进制数字
let sparklingHeart = "\u{1F496}"//💖

【注意】如果需要某些转义字符不生效,需要怎么办呢?

  • 扩展字符分隔符
  1. 在字符串字面量中放置扩展分隔符来在字符串中包含特殊字符而不允许生效。将字符串放在双引号( " )内并由#号( # )包裹
  2. 如需要字符串中某个特殊符号生效,使用匹配你包裹的#号数量的#号并在前面写转义符号 \ (数量不同无效当普通字符处理)
let str1 = "Line1\nLine2\nLine3"
let str2 = #"Line1\#nLine2\nLine3"#
let str3 = ##"Line1\#nLine2\##nLine3"##
print(str1,str2,str3,separator: "\n\n", terminator: "\n")
/*输出结果:
Line1
Line2
Line3

Line1
Line2\nLine3

Line1\#nLine2
Line3
 */

字符串相关用法(常用方法)

字符串初始化
  • ** String.init()**方法
  • 赋值字面量
var str1 = String.init()
var str2 = String.init("hello,world")
var str6 = String.init("Hello".utf8)
var str3 = String.init(repeating: "hello", count: 3)
var str4 = String()
var str5 = ""
String的增删改查
  1. 查询(查找指定下标 判断是否有值)
var str1 = String.init("hello,world")

print(str1[str1.startIndex])//输出:h
//print(str1[str1.endIndex])//错误:越界
print(str1[str1.index(before: str1.endIndex)])//输出:d
print(str1[str1.index(after: str1.startIndex)])//输出:e

var index:String.Index? = str1.firstIndex(of: "o")//返回可选类型 不确定是否能查到

if let index3 = index {
    let index2 = str1.index(index3, offsetBy: 3)
    print(str1[index3],str1[index2])//输出:o  o
}else{
    print("没有找到")
}

print("\(str1.isEmpty)")//输出:false
print("\(str1.count)")//输出:11
  1. 增加、替换、插入指定范围
  • 字符串的特定索引位置插入字符,使用 insert(_:at:)方法
  • 插入另一个字符串的内容到特定的索引,使用 insert(contentsOf:at:) 方法。
  • 字符串插值:是一种从混合常量、变量、字面量和表达式的字符串字面量构造新的String值
//增加字符串
var str1 = String.init("World!")
str1.append("China!")
str1.append(contentsOf: "Wuhan!")
str1 = str1 + "Hongshan!"

print(str1)//输出:World!China!Wuhan!Hongshan!

//插入字符串
var index :String.Index? = str1.firstIndex(of: "H")
str1.insert("😬", at: index!)
str1.insert("😬", at: str1.endIndex)
str1.insert(contentsOf: "HaHa", at: str1.endIndex)
str1.insert(contentsOf: "Hi!", at: str1.index(before: str1.endIndex))
print(str1)//输出:World!China!Wuhan!😬Hongshan!😬HaHHi!a

//区间替换
var str2 = String.init("Wuhan")
var index2 :String.Index? = str2.firstIndex(of: "u")
var index3 :String.Index? = str2.index(before: str2.endIndex)
let replaceSpace = index2!...index3!
str2.replaceSubrange(replaceSpace, with: "德玛西亚")

print(str2)//输出:W德玛西亚

//字符串插值
let value1 = 10,value2 = 20
var str3 = "\(value1)\(value2)"//1020
  1. 删除字符串
var str1 = "abcdefghijklmn"
var index :String.Index = str1.index(before: str1.endIndex)
str1.remove(at: index)//返回值:n 删除成功  str1值: abcdefghijklm
str1.removeFirst()//返回值:a   str1值: bcdefghijklm
str1.removeLast() //返回值:m    str1值: bcdefghijkl

var index2 :String.Index? = str1.firstIndex(of: "d")
str1.removeSubrange(..<index2!)//str1值: defghijkl

let range = str1.index(str1.endIndex, offsetBy: -6)..<str1.endIndex
str1.removeSubrange(range)//str1值: def

str1.removeAll(keepingCapacity: true)//清空 但不释放已分配的空间
str1.removeAll()//清空 默认为false

//删除遍历筛选
var str1 = "asdcbbnn"
str1.removeAll { (char) -> Bool in
    if char > "h"{
        return true
    }else{
        return false
    }
}
print(str1)//输出:adcbb

var str2 = "adcbe7777fg"
str2.removeAll { $0 == "7" }//上面遍历的简写
print(str2)//输出:adcbefg

  1. 更改字符串大小写
str1.uppercased()//ABCDEFGHIJKLMN
str1.lowercased()//abcdefghijklmn
  1. 字符串的比较 、遍历
  • 字符串相等 ==
  • 前缀相同 hasPrefix()
  • 后缀相同 hasSuffix()
var str1 = "abCdefghijklmn"
var str2 = "aBcdefghijklmn"
var hasPref :Bool = str1.hasPrefix("abC")//true
var hasSuff :Bool = str2.hasSuffix("lmn")//true
var isEqual :Bool = str1 == str2     //false

for charatar in str1 {
    print(charatar)
}

//使用indices属性访问字符串
for index in str1.indices {
    print(str1[index])
}

String的其他用法
  1. 字符、字符串也能使用区间运算符 但默认不能用在for-in遍历中
let strRange:ClosedRange<String> = "cc"..."ff"
//如果不声明range类型 默认为String
strRange.contains("cb")//输出:false
strRange.contains("cz")//输出:true
strRange.contains("fg")//输出:false

let charRange :Range<Character> = "b"..<"f"
charRange.contains("a")//输出:false
charRange.contains("d")//输出:true
charRange.contains("f")//输出:false
  1. SubString(具体见第二十章 字符串要点)
  • 使用下标或者类似 prefix(_:) 的方法,结果是一个 Substring 的实例,不是另一个字符串
  • 可以操作字符串相同的方法来操作子字符串。
  • 与字符串不同,在字符串上执行动作的话你应该使用子字符串执行短期处理。当你想要把结果保存得长久一点时,你需要把子字符串转换为 String 实例
  • String和 Substring 都遵循 StringProtocol协议,能很方便地兼容所有接受 StringProtocol值的字符串操作函数

相关文章

  • (三)C语言之字符串与字符串函数

    (三)C语言之字符串与字符串函数 字符串与字符串函数 1. 字符串 使用字符数组存储字符串,\0 表示结束符,字符...

  • iOS 字符串常用处理方法

    一、字符串截取 二、判断字符串是否包含某个字符串 三、字符串转数组&&数组转字符串

  • Python数据类型详解

    字符串 字符串的定义方式 单引号定义字符串 ‘ ’ 双引号定义字符串 “ ” 三引号定义字符串 ‘’‘内容’‘’或...

  • NSString

    一、根据字符串的宽度计算字符串的高度 二、字符串截取、匹配、分隔 三、字符串替换

  • 速撸《python学习手册》--第7章-字符串

    字符串常量 单引号 双引号 三引号 转移字符串 raw字符串 r'a' byte字符串 u'a' 单双印好的字符串...

  • Python基础Day3—容器类型之字符串、列表

    字符串 字符串: 使用引号包裹起来的数据就是字符串 字符串定义方式有四种: 单引号字符串: 双引号字符串: 三个单...

  • 字符串

    1 、普通字符串 2、原始字符串 3、长字符串对于长字符串,使用三个单引号(''')或三个双引号(""")括起来。...

  • 10-第十章 字符串方法和数组

    String即文本(字符串),字符串方法都不改原字符串; 创建 字符串 的三种办法: new String(), ...

  • Kotlin基础认识 (6)字符串

    一、字符串字面量 普通字符串:使用双引号 " 括起来的字符串。 原始字符串:使用三个双引号 """ 括起来的字符串...

  • 零基础小白Python入门必看:最详细之数据类型讲解

    字符串 字符串的坑: 三引号的字符串如果中间没有双引号的字符串,会在解释器中输出为双引号 三引号的字符串如果中间有...

网友评论

    本文标题:三、字符串、字符

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