字符串处理

String和NSString是两个东西,前者是结构体,后者是对象,如果可以尽量使用结构体

创建方式

var str = ""

var str1 = String()

创建方式是上述两种

拼接

str.append("123")
str += "_123"
str = "\(str)_123"

前两个是拼接,第三个是以插值的方式拼接

插入与删除

插入

str.insert("&", at: str.startIndex)
str.insert("&", at: str.endIndex)
str.insert(contentsOf: "8888", at: str.index(str.startIndex, offsetBy: 4))
str.insert(contentsOf: "666", at: str.index(str.endIndex, offsetBy: -4))

插入操作,后面传入String.Index类型,实际按需求来

 ****小知识点:String.Index或者xxx.xxx类型一般就是内部类型,比如说

struct String {
    struct Index{ }
}

上述代码的Index就是String.Index类型

具体怎么生成这个类型,可以查看API

删除

str.remove(at: str.firstIndex(of: "1")!)
let range = str.index(str.endIndex, offsetBy: -4)..<str.endIndex
str.removeSubrange(range)

删除一般是查找删除,或者指定一个range进行删除,具体看上述代码

截取

截取是SubString类型,不是String类型,外加String和SubString都是结构体,所以也不是父子类的关系,不过它们都继承了StringProtocol

截取一般分为前缀,后缀和范围截取

var str = "12345654321"
let preStr = str.prefix(6)
let sufStr = str.suffix(6)
print(preStr)  //123456
print(sufStr)  //654321

prefix就是前缀从0截到第6位,也就是下标5的位置,suffix则是从后往前

var str = "12345654321"
let range = str.index(str.endIndex, offsetBy: -8)..<str.index(str.endIndex, offsetBy: -4)
print(String(str[range]))

比如这个从倒数第8位截取到倒数第四位,截取之后想转换成字符串加String()即可

SubString和String的区别

截取之后就不是字符串了,而是会变成SubString

借一张图片来说明,Substring在不转为String的情况下还是指向String的内存的,只是地址和大小会发生变化,但是如果重新转换成字符串,则重新申请内存

String和Character

如果单独截取一个字符,会发现不会变成SubString而是直接变成了Character类型

多行字符串

多行字符串由""" """定义,定义是什么格式,打印就是什么格式,需要特殊字符就用\转义

String和NSString

开头就说过了,String和NSString是不同的两个东西

默认情况下生成的就是String,如果使用NSString修饰的话

var str:NSString = "ABC"

如上述代码就是一个NSString了

String和NSString是可以随时转换的,不过NSString是一个对象,内存开销比String会大许多,如果是OC开发完全不习惯String就随意了,从本质而言,两者除了都是针对字符串的处理方式这一点来说,本身几乎没有什么太多共同点,处理方式也不一样

附一张桥接转换表:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值