Swift3.0語言教程查找字符集和子字符串,在字符串中當字符內容不少時,咱們就須要使用到查找字符集或者子字符串的方法。如下咱們將講解3種查找字符集和子字符串的方法,判斷字符串中是否包含某個給定字符串、搜索字符集或者子字符串和枚舉字符串。函數
1.判斷字符串中是否包含某個給定字符串spa
NSString提供了3種方法用於判斷字符串是否包含其餘字符串。它們分別爲contains(_:)、localizedCaseInsensitiveContains(_:)和localizedStandardContains(_:)方法。.net
(1)contains(_:)方法用來判斷字符串A是否包含aString字符串,其語法形式以下:code
func contains(_ str: String) -> Boolblog
其中,str用來指定一個字符串。教程
【示例1-40】如下將判斷在字符串a中是否包含"Hello"、"ello"和"eo"字符串。ci
import Foundation字符串
var a=NSString(string:"Hello,World")get
//判斷在字符串a中是否包含"Hello"字符串string
if(a.contains("Hello")){
print("a字符串中包含Hello字符串")
}else{
print("a字符串中不包含Hello字符串")
}
//判斷在字符串a中是否包含"ello"字符串
if(a.contains("ello")){
print("a字符串中包含ello字符串")
}else{
print("a字符串中不包含ello字符串")
}
//判斷在字符串a中是否包含"eo"字符串
if(a.contains("eo")){
print("a字符串中包含eo字符串")
}else{
print("a字符串中不包含eo字符串")
}
運行結果以下:
a字符串中包含Hello字符串
a字符串中包含ello字符串
a字符串中不包含eo字符串
(2)localizedCaseInsensitiveContains(_:)方法的功能是判斷字符串A是否包含字符串B,不區分大小寫,其語法形式以下:
func localizedCaseInsensitiveContains(_ str: String) -> Bool
其中,str用來指定一個字符串。
【示例1-41】如下將判斷在字符串a中是否包含"hello"、"ello"和"eo"字符串。
import Foundation
var a=NSString(string:"Hello,World")
//判斷在字符串a中是否包含"Hello"字符串
if(a.localizedCaseInsensitiveContains("hello")){
print("a字符串中包含hello字符串")
}else{
print("a字符串中不包含hello字符串")
}
//判斷在字符串a中是否包含"ello"字符串
if(a.localizedCaseInsensitiveContains("ello")){
print("a字符串中包含ello字符串")
}else{
print("a字符串中不包含ello字符串")
}
//判斷在字符串a中是否包含"eo"字符串
if(a.localizedCaseInsensitiveContains("eo")){
print("a字符串中包含eo字符串")
}else{
print("a字符串中不包含eo字符串")
}
運行結果以下:
a字符串中包含hello字符串
a字符串中包含ello字符串
a字符串中不包含eo字符串
(3)localizedStandardContains(_:)方法能夠用來判斷本地化的字符串A是否包含字符串B,其語法形式以下:
func localizedStandardContains(_ str: String) -> Bool
其中,str用來指定一個字符串。
【示例1-42】如下將判斷在字符串a中是否包含"He"字符串。
import Foundation
var a=NSString(string:"Hello,World")
if(a.localizedStandardContains("He")){
print("a字符串中包含He字符串")
}else{
print("a字符串中不包含He字符串")
}
運行結果以下:
a字符串中包含He字符串
2.搜索字符集或者子字符串
在上文中判斷字符串中是否包含某個給定字符串其實就是對字符串的一種搜索,它返回的是一個Bool值。爲了讓搜索更爲詳細,咱們將使用下面的內容實現,也就是搜索字符集或者子字符串。
(1)搜索字符集
在字符串中若是咱們須要搜索指定字符集(字符集表示一個字符),須要使用到NSString中的3個方法,分別爲:rangeOfCharacter(from:)、rangeOfCharacter(from:options:)和rangeOfCharacter(from:options:range:)方法。
rangeOfCharacter(from:)方法實現的功能是搜索指定的字符集,其語法形式以下:
func rangeOfCharacter(from searchSet: CharacterSet) -> NSRange
其中,searchSet用來指定字符集。
【示例1-43】如下將在字符串中搜索字符集c,並輸出字符集c的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
var c:CharacterSet=NSCharacterSet(charactersIn:"W") as CharacterSet
print(a.rangeOfCharacter(from: c).location) //搜索字符集
運行結果以下:
6
rangeOfCharacter(from:options:)方法和rangeOfCharacter(from:)方法的功能相似,可是它比rangeOfCharacter(from:)方法多了一個mask參數,該參數能夠用來指定一個選項標記(這個標記能夠做爲搜索的條件)。其語法形式以下:
func rangeOfCharacter(from searchSet: CharacterSet, options mask: NSString.CompareOptions = []) -> NSRange
【示例1-44】如下將使用rangeOfCharacter(from:options:)方法對指定字符集進行搜索,並輸出字符集的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
var c:CharacterSet=NSCharacterSet(charactersIn:"r") as CharacterSet
print(a.rangeOfCharacter(from: c, options: NSString.CompareOptions.caseInsensitive).location)
運行結果以下:
8
rangeOfCharacter(from:options:range:)方法和rangeOfCharacter(from:options:)方法的功能相似,可是它比rangeOfCharacter(from:options:)方法多了一個rangeOfReceiverToSearch參數,該參數能夠設置搜索的範圍。其語法形式以下:
func rangeOfCharacter(from searchSet: CharacterSet, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange) -> NSRange
【示例1-45】如下將使用rangeOfCharacter(from:options:range:)方法對指定字符集進行搜索,並輸出字符集的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
var c:CharacterSet=NSCharacterSet(charactersIn:"r") as CharacterSet
print(a.rangeOfCharacter(from: c, options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(3, 7)).location) //搜索字符集
print(a.rangeOfCharacter(from: c, options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 3)).location) //搜索字符集
運行結果以下:
8
9223372036854775807
(2)搜索字符串
在字符串中若是咱們須要搜索指定子字符串,須要使用到NSString中的5個方法,分別爲:localizedStandardRange(of:)、range(of:)、range(of:options:)、range(of:options:range:)和range(of:options:range:locale:)方法。其中,localizedStandardRange(of:)方法是在本地化的字符串A中搜索子字符串,其語法形式以下:
func localizedStandardRange(of str: String) -> NSRange
其中,str用來指定一個子字符串。
【示例1-46】如下將搜索子字符串,並輸出子字符串的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
//搜索子字符串
print(a.localizedStandardRange(of: "lo").location)
print(a.localizedStandardRange(of: "H").location)
print(a.localizedStandardRange(of: "B").location)
運行結果以下:
3
0
9223372036854775807
range(of:)方法的功能是對子字符串進行搜索。其語法形式以下:
func range(of searchString: String) -> NSRange
其中,searchString用來指定一個子字符串。
【示例1-47】如下將搜索子字符串,並輸出子字符串的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
print(a.range(of: "World").location) //搜索子字符串
運行結果以下:
6
range(of:options:)方法和range(of:)方法的功能相似,可是它比range(of:)方法多了一個mask參數,該參數能夠用來指定一個選項標記(這個標記能夠做爲搜索的條件)。其語法形式以下:
func range(of searchString: String, options mask: NSString.CompareOptions = []) -> NSRange
【示例1-48】如下將搜索子字符串,並輸出子字符串的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
print(a.range(of: "LD", options: NSString.CompareOptions.caseInsensitive).location) //搜索子字符串
運行結果以下:
9
range(of:options:range:)方法和range(of:options:)方法的功能相似,可是它比range(of:options:)方法多了一個rangeOfReceiverToSearch參數,該參數能夠設置搜索的範圍。其語法形式以下:
func range(of searchString: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange) -> NSRange
【示例1-49】如下將搜索子字符串,並輸出子字符串的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
print(a.range(of: "LL", options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 7)).location)
運行結果以下:
2
range(of:options:range:locale:)方法和range(of:options:range:)方法的功能相似,可是它比range(of:options:range:)方法多了一個locale參數,該參數能夠語言環境。其語法形式以下:
func range(of searchString: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange, locale: Locale?) -> NSRange
【示例1-50】如下將搜索子字符串,並輸出子字符串的第一個位置。
import Foundation
var a=NSString(string:"Hello,World")
var l=Locale.current
print(a.range(of: "O,", options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 7), locale: l).location)
運行結果以下:
4
3.枚舉字符串
在字符串中,若是咱們想要遍歷輸出字符或者子字符串能夠使用循環,固然,也能夠使用NSString中提供的兩個方法,一個是enumerateLines(_:)方法,另外一個是enumerateSubstrings(in:options:using:)方法。
(1)enumerateLines(_:)方法能夠枚舉出字符串中全部的行,其語法形式以下:
func enumerateLines(_ block: (String, UnsafeMutablePointer<ObjCBool>) -> Void)
其中,block用來指定枚舉執行的塊函數。
【示例1-51】如下將使用enumerateLines(_:)方法枚舉出字符串a中的全部行。
import Foundation
var a=NSString(string:"Hello\nWorld\nSwift\niOS\nXcode\nMac")
//枚舉
a.enumerateLines({
(str:String,obj:UnsafeMutablePointer<ObjCBool>) in
print(str)
})
運行結果以下:
Hello
World
Swift
iOS
Xcode
Mac
(2)enumerateSubstrings(in:options:using:)方法的功能是在字符串的指定範圍內,枚舉子字符串,其語法形式以下:
func enumerateSubstrings(in range: NSRange, options opts: NSString.EnumerationOptions = [], using block: (String?, NSRange, NSRange, UnsafeMutablePointer<ObjCBool>) -> Void)
其中,range用來指定範圍,opts是一個枚舉選項,用來指定子字符串和枚舉風格的類型,block用來指定枚舉執行的塊函數。
【示例1-52】如下將使用enumerateSubstrings(in:options:using:)方法將枚舉字符串中的子字符串。
import Foundation
var a=NSString(string:"The hard part isn’t making the decision. It’s living with it.")
//枚舉
a.enumerateSubstrings(in: NSMakeRange(0, a.length), options: NSString.EnumerationOptions.byWords, using: {
(substring:String?, substringRage:NSRange, enclosingRange:NSRange, obj:UnsafeMutablePointer<ObjCBool>) in
print(substring!)
})
運行結果以下:
The
hard
part
isn’t
making
the
decision
It’s
living
with
it
Swift3.0語言教程查找字符集和子字符串
相關閱讀:Swift3.0語言教程比較、判斷字符串