Swift3.0語言教程查找字符集和子字符串


Swift3.0語言教程查找字符集和子字符串

Swift3.0語言教程查找字符集和子字符串,在字符串中當字符內容很多時,我們就需要使用到查找字符集或者子字符串的方法。以下我們將講解3種查找字符集和子字符串的方法,判斷字符串中是否包含某個給定字符串、搜索字符集或者子字符串和枚舉字符串。

1.判斷字符串中是否包含某個給定字符串

NSString提供了3種方法用於判斷字符串是否包含其他字符串。它們分別為contains(_:)、localizedCaseInsensitiveContains(_:)和localizedStandardContains(_:)方法。

(1)contains(_:)方法用來判斷字符串A是否包含aString字符串,其語法形式如下:

func contains(_ str: String) -> Bool

其中,str用來指定一個字符串。

【示例1-40】以下將判斷在字符串a中是否包含"Hello"、"ello"和"eo"字符串。

import Foundation

var  a=NSString(string:"Hello,World")

//判斷在字符串a中是否包含"Hello"字符串

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語言教程比較、判斷字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM