Swift_字符串详解(String)


点击查看源码

类型别名

//类型别名
fileprivate func testTypeAliases() {
let index = String.Index.self
print("\(index)") let utf8index = String.UTF8Index.self
print("\(utf8index)") let utf16index = String.UTF16Index.self
print("\(utf16index)") let unicodeScalarIndex = String.UnicodeScalarIndex.self
print("\(unicodeScalarIndex)") let greeting = "XuBaoAiChiYu"
print(greeting[greeting.startIndex])//输出字符串的第一个字符
print(greeting[greeting.characters.index(before: greeting.endIndex)])//输出字符串的最后一个字符
print(greeting[greeting.characters.index(after: greeting.startIndex)])//输出字符串的第二个字符
print(greeting[greeting.characters.index(greeting.startIndex, offsetBy: 7)])//输出字符串的第八个字符 /* print Index
Index
Index
Index
X
u
u
C */
}

初始化

//初始化
fileprivate func testInitializers() { //初始化
var string: String = String()
string = "XuBaoAiChiYu" print(string) //char 初始化
let char: Character = "X"
string = String(char)
print(string)
string = String.init(char)
print(string)
string = "\(char)"
print(string) // 通过CharacterView
let charView: String.CharacterView = String.CharacterView("XuBaoAiChiYu")
string = String(charView)
print(string) //通过 utf-16 编码
let utf16: String.UTF16View = string.utf16
string = String(describing: utf16)
print(utf16) //通过 utf-8 编码
let utf8: String.UTF8View = string.utf8
string = String(describing: utf8)
print(utf8) //通过多个字符串组合生成
string = String(stringInterpolation: "xu", "bao")
print(string) //char初始化 连续count次
string = String(repeating: String(char), count: 6)
print(string) //通过其他常用数据初始化
string = String(stringInterpolationSegment: true)
print(string)
string = String(stringInterpolationSegment: 24)
print(string) // 通过NSString初始化,不推荐
string = NSString(string: "XuBaoAiChiYu") as String
print(string)
string = NSString.init(string: "XuBaoAiChiYu") as String
print(string) // 组合生成
string = NSString(format: "%@", "XuBaoAiChiYu") as String
print(string) /* print XuBaoAiChiYu
X
X
X
XuBaoAiChiYu
XuBaoAiChiYu
XuBaoAiChiYu
xubao
XXXXXX
true
24
XuBaoAiChiYu
XuBaoAiChiYu
XuBaoAiChiYu */
}

文件路径操作

//文件路径操作
fileprivate func testWorkingWithPaths() { var path = "xubaoaichiyu/ios/swift"
print(path) //路径分割成熟数组
var pathComponents = (path as NSString).pathComponents
print(pathComponents) //数组组合成路径
path = NSString.path(withComponents: pathComponents)
print(path) //Document目录
let documents: [String] = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, .userDomainMask, true)
print(documents)
let documentPath: String = documents.first!
print(documentPath) //寻找文件夹下包含多少个路径
var complete = documentPath.completePath(caseSensitive: true)
print(complete) //寻找文件夹下包含指定扩展名的文件路径个数
var outName = ""
let filterTypes = ["txt", "plist"]
complete = documentPath.completePath(into: &outName, caseSensitive: true, matchesInto: &pathComponents, filterTypes: filterTypes)
print("completePathIntoString:\(complete)") //添加路径
path = (documentPath as NSString).appendingPathComponent("test")
print(path)
//添加扩展
path = (path as NSString).appendingPathExtension("plist")!
print(path) print("是否绝对路径:\((path as NSString).isAbsolutePath)")
print("最后一个路径名:\((path as NSString).lastPathComponent)")
print("扩展名:\((path as NSString).pathExtension)") //去掉扩展名
var tempPath = (path as NSString).deletingPathExtension
print(tempPath)
//去掉最后一个路径
tempPath = (path as NSString).deletingLastPathComponent
print(tempPath) //转%格式码
let allowedCharacters:CharacterSet = CharacterSet.controlCharacters
tempPath = path.addingPercentEncoding(withAllowedCharacters: allowedCharacters)!
print(tempPath) //转可见
tempPath = (tempPath as NSString).removingPercentEncoding!
print(tempPath) /* print xubaoaichiyu/ios/swift
["xubaoaichiyu", "ios", "swift"]
xubaoaichiyu/ios/swift
["/Users/caoxu/Documents"]
/Users/caoxu/Documents
4
completePathIntoString:1
/Users/caoxu/Documents/test
/Users/caoxu/Documents/test.plist
是否绝对路径:true
最后一个路径名:test.plist
扩展名:plist
/Users/caoxu/Documents/test
/Users/caoxu/Documents
%2F%55%73%65%72%73%2F%63%61%6F%78%75%2F%44%6F%63%75%6D%65%6E%74%73%2F%74%65%73%74%2E%70%6C%69%73%74
/Users/caoxu/Documents/test.plist */ }

文件读写操作

//文件读写操作
fileprivate func testFile() { var string = "XuBaoAiChiYu" //Document目录
let documents = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
var path = documents.first!
path = (path as NSString).appendingPathComponent("xubaoaichiyu")
path = (path as NSString).appendingPathExtension("text")!
let pathUrl = URL(fileURLWithPath: path) do {
//写入
try string.write(toFile: path, atomically: true, encoding: String.Encoding.utf8)
try string.write(to: pathUrl, atomically: true, encoding: String.Encoding.utf8) // 读取
// 自动解析
try string = String(contentsOfFile: path)
print(string)
// 指定编码解析
try string = String(contentsOfFile: path, encoding: String.Encoding.utf8)
print(string)
// 使用默认的编码解析 如果不能解析 采取默认解析并返回解析编码
var encoding:String.Encoding = String.Encoding.utf16LittleEndian
try string = String(contentsOfFile: path, usedEncoding: &encoding)
print(string) // URl 读取
try string = String(contentsOf: pathUrl)
print(string)
try string = String(contentsOf: pathUrl, encoding: String.Encoding.utf8)
print(string)
try string = String(contentsOf: pathUrl, usedEncoding: &encoding)
print(string)
} catch {
print("错误:\(error)")
} /* print XuBaoAiChiYu
XuBaoAiChiYu
XuBaoAiChiYu
XuBaoAiChiYu
XuBaoAiChiYu
XuBaoAiChiYu */
}

获取字符串的Swift属性

//获取字符串的Swift属性
fileprivate func testGettingProperties() {
let string = String(stringInterpolation: "XuBaoAiChiYu", "QQ", "1045214799") // String.CharacterView
print("String.CharacterView:\(string.characters)") // String.UnicodeScalarView
print("String.UnicodeScalarView:\(string.unicodeScalars)") // String.UTF16View
print("String.UTF16View:\(string.utf16)") // String.UTF8View
print("String.UTF8View:\(string.utf8)") // hash值
print("hashValue:\(string.hashValue)") // 是否为空
print("isEmpty:\(string.isEmpty)") /* print String.CharacterView:CharacterView(_core: Swift._StringCore(_baseAddress: Optional(0x0000000100b06e80), _countAndFlags: 24, _owner: Optional(Swift._HeapBufferStorage<Swift._StringBufferIVars, Swift.UInt16>)))
String.UnicodeScalarView:XuBaoAiChiYuQQ1045214799
String.UTF16View:XuBaoAiChiYuQQ1045214799
String.UTF8View:XuBaoAiChiYuQQ1045214799
hashValue:-8659559252040524018
isEmpty:false */
}

获取字符串长度

//获取字符串长度
fileprivate func testGettingLength() {
var string: String = String()
string = "XuBaoAiChiYu: 1045214799" // 起始位置
var index = string.startIndex
print(index) // 结束位置
index = string.endIndex
print(index) // NSString方式获取长度
var length = (string as NSString).length
print(length) // swift方式获取
length = string.characters.distance(from: string.startIndex, to: string.endIndex)
print(length) // 通过编码获取长度
length = string.lengthOfBytes(using: String.Encoding.utf8)
print(length) /* print Index(_base: Swift.String.UnicodeScalarView.Index(_position: 0), _countUTF16: 1)
Index(_base: Swift.String.UnicodeScalarView.Index(_position: 24), _countUTF16: 0)
24
24
24 */
}

大小写变化

//大小写变化
fileprivate func testChangingCase() {
var string = "XuBaoAiChiYu QQ 1045214799"
print(string) //大写
string = string.uppercased()
print(string) //小写
string = string.lowercased()
print(string) /* print XuBaoAiChiYu QQ 1045214799
XUBAOAICHIYU QQ 1045214799
xubaoaichiyu qq 1045214799 */ }

字符串转数值

//字符串转数值
fileprivate func testGettingNumericValues() { let string = "24"
print(string)
let nStr = string as NSString // 借用NSString输出
print(nStr) print("doubleValue:\(nStr.doubleValue)")
print("floatValue:\(nStr.floatValue)")
print("intValue:\(nStr.intValue)")
print("integerValue:\(nStr.integerValue)")
print("longLongValue:\(nStr.longLongValue)")
print("boolValue:\(nStr.boolValue)") /* print 24
24
doubleValue:24.0
floatValue:24.0
intValue:24
integerValue:24
longLongValue:24
boolValue:true */
}

增加字符串

//增加字符串
fileprivate func testCombiningStrings() { var string = "XuBaoAiChiYu QQ 1045214799"
print(string) // 添加字符串
string.append("_Swift")
print(string) string += "_Swift"
print(string) string.write("_Swift")
print(string) // string后增加字符串并生成一个新的字符串
string = string + string
print(string) // string后增加组合字符串并生成一个新的字符串
string = string.appendingFormat("_%@", "OC")
print(string) // string后增加循环字符串,stringByPaddingToLength:完毕后截取的长度;startingAtIndex:从增加的字符串第几位开始循环增加。
string = string.padding(toLength: 30, withPad:"_Swift", startingAt:3)
print(string) // 指定位置插入Character
string.insert("5", at: string.characters.index(string.endIndex, offsetBy: -1))
print(string) // 指定位置插入字符串
string.insert(contentsOf: "78".characters, at: string.characters.index(string.startIndex, offsetBy: 9))
print(string) /* print XuBaoAiChiYu QQ 1045214799
XuBaoAiChiYu QQ 1045214799_Swift
XuBaoAiChiYu QQ 1045214799_Swift_Swift
XuBaoAiChiYu QQ 1045214799_Swift_Swift_Swift
XuBaoAiChiYu QQ 1045214799_Swift_Swift_SwiftXuBaoAiChiYu QQ 1045214799_Swift_Swift_Swift
XuBaoAiChiYu QQ 1045214799_Swift_Swift_SwiftXuBaoAiChiYu QQ 1045214799_Swift_Swift_Swift_OC
XuBaoAiChiYu QQ 1045214799_Swi
XuBaoAiChiYu QQ 1045214799_Sw5i
XuBaoAiCh78iYu QQ 1045214799_Sw5i */
}

分割字符串

//分割字符串
fileprivate func testDividingStrings() {
let str = "XuBaoAiChiYu_QQ_1045214799" //根据指定的字符串分割成数组
var array = str.components(separatedBy: "_")
print(array) //通过系统自带的分割方式分割字符串
array = str.components(separatedBy: CharacterSet.lowercaseLetters)
print(array) // 指定位置后的字符串
var tempStr = str.substring(from: str.characters.index(str.startIndex, offsetBy: 3))
print(tempStr) // 指定位置前的字符串
tempStr = str.substring(to: str.characters.index(str.startIndex, offsetBy: 3))
print(tempStr) // 指定范围的字符串
let range = str.characters.index(str.endIndex, offsetBy: -6)..<str.endIndex
tempStr = str.substring(with: range)
print(tempStr) /* print ["XuBaoAiChiYu", "QQ", "1045214799"]
["X", "B", "", "A", "C", "", "Y", "_QQ_1045214799"]
aoAiChiYu_QQ_1045214799
XuB
214799 */
}

查找字符串

//查找字符串
fileprivate func testFindingStrings() { let str = "XuBaoAiChiYu_QQ_1045214799";
let searchRange = str.startIndex ..< str.characters.index(str.startIndex, offsetBy: 10)
print(searchRange) //根据NSCharacterSet查找
let cSet = CharacterSet.uppercaseLetters
var range = str.rangeOfCharacter(from: cSet)
print(range!) //根据字符串查找
range = str.range(of: "Yu")
print(range!)
range = str.range(of: "Yu", options: NSString.CompareOptions.caseInsensitive, range: searchRange, locale: nil)
if let tempRange = range {
print("tempRange:\(tempRange)")
} //block 行查找
str.enumerateLines { (line, stop) -> () in
print(line)
if "Yu" == line {
stop = true
}
} //block查找 可设置查找方式 并得到找到的位置
str.enumerateSubstrings(in: searchRange, options: NSString.EnumerationOptions.byComposedCharacterSequences) { (substring, substringRange, enclosingRange, stop) -> () in
print(substring!)
if "A" == substring {
print(substringRange)
stop = true
}
} /* print Index(_base: Swift.String.UnicodeScalarView.Index(_position: 0), _countUTF16: 1)..<Index(_base: Swift.String.UnicodeScalarView.Index(_position: 10), _countUTF16: 1)
Index(_base: Swift.String.UnicodeScalarView.Index(_position: 0), _countUTF16: 1)..<Index(_base: Swift.String.UnicodeScalarView.Index(_position: 1), _countUTF16: 1)
Index(_base: Swift.String.UnicodeScalarView.Index(_position: 10), _countUTF16: 1)..<Index(_base: Swift.String.UnicodeScalarView.Index(_position: 12), _countUTF16: 1)
XuBaoAiChiYu_QQ_1045214799
X
u
B
a
o
A
Index(_base: Swift.String.UnicodeScalarView.Index(_position: 5), _countUTF16: 1)..<Index(_base: Swift.String.UnicodeScalarView.Index(_position: 6), _countUTF16: 1) */
}

替换字符串

//替换字符串
fileprivate func testReplacingSubstrings() { var string = "XuBaoAiChiYu_QQ_1045214799"
let replacingRange = string.startIndex..<string.characters.index(string.startIndex, offsetBy: 20)
print(string) //全局替换
string = string.replacingOccurrences(of: "+", with: " ")
print(string)
//设置替换的模式 并设置范围
string = string.replacingOccurrences(of: "+", with: "_", options: NSString.CompareOptions.caseInsensitive, range: replacingRange)
print(string) //将指定范围的字符串替换为指定的字符串
string.replaceSubrange(replacingRange, with: "YYYYYYYYYYYYYYY")
print(string)
string = string.replacingCharacters(in: replacingRange, with: "YYYYY")
print(string) /* print XuBaoAiChiYu_QQ_1045214799
XuBaoAiChiYu_QQ_1045214799
XuBaoAiChiYu_QQ_1045214799
YYYYYYYYYYYYYYY214799
YYYYY9 */ }

删除字符串

//删除字符串
fileprivate func testRemovingSubstrings() {
var string = "XuBaoAiChiYu_QQ_1045214799"
print(string)
//删除指定位置的字符串
string.remove(at: string.characters.index(string.startIndex, offsetBy: 1))
print(string) //根据范围删除字符串
let range = string.characters.index(string.endIndex, offsetBy: -6)..<string.endIndex
string.removeSubrange(range)
print(string) //删除所有
string.removeAll()
string.removeAll(keepingCapacity: true) /* print XuBaoAiChiYu_QQ_1045214799
XBaoAiChiYu_QQ_1045214799
XBaoAiChiYu_QQ_1045 */
}

比较字符串

//比较字符串
fileprivate func testComparingStrings() { var string = "XuBaoAiChiYu_QQ_1045214799"
let compareStr = "XuBaoAiChiYu_QQ_1045214799"
let searchRange = string.characters.index(string.startIndex, offsetBy: 5)..<string.characters.index(before: string.endIndex)
print(searchRange) //前缀
var isHas = string.hasPrefix("Xu")
print("hasPrefix:\(isHas)") //后缀
isHas = string.hasSuffix("1045214799")
print("hasSuffix:\(isHas)") //全比较是否相同
isHas = string == compareStr
print(isHas) //比较大小
var result = string.compare(compareStr)
print(result.hashValue) //添加比较范围
result = string.compare(compareStr, options: NSString.CompareOptions.caseInsensitive, range: searchRange, locale: nil)
print("result:\(result.hashValue)") // 返回两个字符串相同的前缀
string = string.commonPrefix(with: compareStr, options: NSString.CompareOptions.caseInsensitive)
print(string) /* print Index(_base: Swift.String.UnicodeScalarView.Index(_position: 5), _countUTF16: 1)..<Index(_base: Swift.String.UnicodeScalarView.Index(_position: 25), _countUTF16: 1)
hasPrefix:true
hasSuffix:true
true
1
result:0
XuBaoAiChiYu_QQ_1045214799 */ }

Swift_字符串详解(String)的更多相关文章

  1. 小白基础Python重要的字符串详解String的内置方法

    String的内置方法: st='hello world  {name} is {age}'  {}  特殊内容需要识别format print(st.count('1')) 统计元素个数 print ...

  2. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

  3. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

  4. Swift_字典详解

    Swift_字典详解 点击查看源码 初始化 fileprivate func testInit() { //空字典 var dic = [String:String]() print(dic) dic ...

  5. Swift_数组详解

    Swift_数组详解 点击查看源码 初始化 //初始化 fileprivate func testInit() { //空数组 var array = [Int]() print(array) arr ...

  6. java基础(3)--详解String

    java基础(3)--详解String 其实与八大基本数据类型一样,String也是我们日常中使用非常频繁的对象,但知其然更要知其所以然,现在就去阅读源码深入了解一下String类对象,并解决一些我由 ...

  7. Python变量和字符串详解

    Python变量和字符串详解 几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣 ...

  8. C语言中字符串详解

    C语言中字符串详解 字符串时是C语言中非常重要的部分,我们从字符串的性质和字符串的创建.程序中字符串的输入输出和字符串的操作来对字符串进行详细的解析. 什么是字符串? C语言本身没有内置的字符串类型, ...

  9. SQL Server日期时间格式转换字符串详解

    本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...

随机推荐

  1. struts2默认Action配置

    在项目中,需要在输入错误的url的时候,弹出友好的错误提示页面 在struts2中可以通过配置默认的action达到这个目的 配置方法: <package name="default& ...

  2. Django with uWSGI and nginx

    Reference:http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html Setting up Dja ...

  3. 如何设置打开jsp页面速度加快?

    1.

  4. MySQL服务器的线程数查看方法

    mysql重启命令:/etc/init.d/mysql restart MySQL服务器的线程数需要在一个合理的范围之内,这样才能保证MySQL服务器健康平稳地运行.Threads_created表示 ...

  5. TCP实现P2P通信

    Internet的迅速发展以及IPv4 地址数量的限制使得网络地址翻译(NAT,Network Address Trans2lation)设备得到广泛应用.NAT设备允许处于同一NAT后的多台主机共享 ...

  6. 在Unity3D中实现安卓平台的本地通知推送

    [前言] 对于手游来说,什么时候需要推送呢?玩过一些带体力限制的游戏就会发现,我的体力在恢复满后,手机会收到一个通知告诉我体力已完全恢复了.这类通知通常是由本地的客户端发起的,没有经过服务端. 在安卓 ...

  7. Ionic在线打包IOS平台应用

    参见:http://docs.ionic.io/services/profiles/#ios-app-certificate--provisioning-profile Ionic云编译,需要注册.地 ...

  8. $http post 取不到数据

    默认情况下,jQuery传输数据使用Content-Type: x-www-form-urlencoded 和类似于"foo=bar&baz=moe"的序列,然而Angul ...

  9. 使用Intent创建Tab页面

    前面已经介绍了如何使用TabActivity来创建Activity布局,前面添加Tab页面使用了TabHost.TabSpec如下方法. setContent(int viewId):直接将指定Vie ...

  10. Flink架构、原理与部署测试

    Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...