Swift学习笔记3——String和Character
来源:互联网 发布:德军 知乎 编辑:程序博客网 时间:2024/06/08 19:46
为啥String和Character要单独拿出来讲呢?因为和C区别蛮大的,而且经常用到。感觉Swift的String还是没有Java的String好用。比如截串就是个麻烦的事情。以后String可能还会更新,让String变得更加好用。
需要注意的是,Swift中的String是值传递。附上String 的定义就明白了。
public struct String { /// An empty `String`. public init()}
开始就是创建字符串,最简单的方法如下
var str = "I am a string"//创建空串的两种方法,二者是一样的var emptyStr1 = ""var emptyStr2 = String()
Character相比于C和java来讲有区别,如果要创建一个Character,必须显式声明类型
var c1:Character = "c" //注意是双引号var c2 = "c" //c2被认为是String类型var c3 = 'c' //编译错误
Character可以赋值为Unicode
let eAcute: Character = "\u{E9}" // é
改变String,这个语法和java一样的,不过内存管理层面已经是不同的对象了。
var str:String = "first"var c1:Character = "c" //注意是双引号var c2 = "c" //c2被认为是String类型str += "sceond" //str变为firstsceond,此时的str和之前的str内存地址不同str += c2 //str变为firstc,此时的str和之前的str内存地址不同str.appendContentsOf("second") // 和使用+=是一样的str.appendContentsOf(c2) //和使用+=是一样的str.append(c1); //添加Character的方法
遍历String字符的两种方法
var str:String = "first"for c in str.characters { print(c)}for index in str.characters.indices { print(str[index])}
获取String长度的办法
var s = "dfe"print(s.characters.count) //3
String的Index,这个蛋疼啊!不像java里面的Index直接就是一个数字。String的Index是在不同的extension中定义的。
先来看获得String里面的某个字符的过程,蛋疼。直接上官方文档
let greeting = "Guten Tag!"greeting[greeting.startIndex]// Ggreeting[greeting.endIndex.predecessor()]// !greeting[greeting.startIndex.successor()]// ulet index = greeting.startIndex.advancedBy(7)greeting[index]// a
得到Index的方法现在我只知道两个
str.startIndex //指向第一个字符str.endIndex //这个指向的并不是String最后一个字符,而是最后一个字符的index+1
str.startIndex.successor() //后一个indexstr.endIndex.predecessor() //前一个indexvar inde = str.startIndex.advancedBy(1) //后一个index,输入负数的话向前。关于advancedBy这个方法,以前是advance这个方法,现在不能用了
所以想要截串的话,就要通过上面那些蛋疼的方法来获得index后截取
//截串的三个方法str.substringWithRange(aRange: Range<Index>)str.substringFromIndex(index: Index) //包含fromIndex那个字符str.substringToIndex(index: Index) //不包含toIndex那个字符
利用上面的方法截串例子
var str = "123456789"var range = Range<String.Index>(start:str.startIndex.advancedBy(1),end:str.endIndex.advancedBy(-4))print(str.substringWithRange(range)) //输出 2345
另外一种方法就是将String转换为NSString,然后调用NSString的截串方法
var str = "123456789"var ns = (str as NSString).substringWithRange(NSMakeRange(1, 4))print(ns) //输出 2345
这些都是麻烦的方法,最好就是写一个extension来扩展String,先附上代码
import Foundationextension String { //获取字符串长度 var length: Int { return self.characters.count } //获取部分字符串,如果不在范围内,返回nil.如果end大于字符串长度,那么截取到最后 subscript (start: Int, end: Int) -> String? { if start > self.length || start < 0 || start > end { return nil } let begin = self.characters.index(self.startIndex, offsetBy: start) var terminal: Index if end >= length { terminal = self.characters.index(self.startIndex, offsetBy: length) } else { terminal = self.characters.index(self.startIndex, offsetBy: end + 1) } let range = (begin ..< terminal) return self.substring(with: range) } //获取某个字符,如果不在范围内,返回nil subscript (index: Int) -> Character? { if index > self.length - 1 || index < 0 { return nil } return self[self.characters.index(self.startIndex, offsetBy: index)] }}
0 0
- Swift学习笔记3——String和Character
- Swift4学习笔记3——String和Character
- Swift学习笔记(十八)——字符串String.Index和Range详解
- swift——Unicode Character
- swift中字符与字符串(Character和String)
- swift中String和Character的使用与总结
- swift--Swift中String和Character的使用与总结
- String和Character
- 【JavaSE_学习笔记】Integer和Character
- 【Swift】学习笔记(三)——字符和字符串
- 【Swift】学习笔记(八)——类和结构体
- Swift学习笔记—— 类和结构体
- 常量和变量——swift学习笔记(1)
- 字符和字符串—Swift学习笔记(六)
- 数组和字典—Swift学习笔记(七)
- 类和结构体—Swift学习笔记(十二)
- 协议和委托—Swift学习笔记(十九)
- Swift学习笔记(十六)——String字符串的基础操作
- PHP学习(四)--数据类型之间相互转换
- Kernel Trick——核机制,更高维空间内积的快速计算
- Cocos2d-x学习(二) 在Cocos2d-x2.2.6搭建你第一个项目
- 1,Two sum (Hashtable Array)
- 2,Add Two Number (LinkList Math)
- Swift学习笔记3——String和Character
- 索引
- 配置汇编环境=>可能会长期更新
- Linux(CentOS)下的apache服务器配置与管理
- Hibernate更新某些字段的几种update方法
- 判断s3字符串是否由s1和s2交错组成
- Hibernate sql操作的三种方法 HQL QBC Native SQL查询
- HDU 5477 A Sweet Journey(本场的最水题,过程处理好是关键)——2015 ACM/ICPC Asia Regional Shanghai Online
- ListView乱谈之ListView的滚动原理