一、前言
開發的過程中經常要判斷字符串是否為空,包括包含多個空格的字符串,如" "
,這個字符串在程序中也要判別為空串。那么如何判斷字符串為空呢
二、系統提供的方法
可以用系統原生的方法判斷
-
通過字符串自帶的屬性isEmpty判斷是否為空:
A Boolean value indicating whether a string has no characters
var text = "hello!"
//如果有字符返回false,如果沒有字符返回true.但是如果字符串是空格或換行符,則認為存在字符返回false
text.isEmpty
- 通過獲取字符串的字符數count判斷是否為空:
var text = "hello!"
//如果字符數大于0,則認為字符串不為空,如果字符數等于0,則認為字符串為空。但是如果字符串是空格或換行符,則 count會大于0,字符串不為空
text.count == 0
可見以上兩種方法無法處理text = " "
和text = "\n"
這些形式的字符串,也就是說Swift認為" "
不是空字串!
所以我們可以通過對String進行擴展其屬性來實現,看下邊。
三、對String的擴展方法
先來個測試代碼
class ViewController: UIViewController {
//text的值可以修改為:""," "," 哈哈","\n"進行測試
var text = "哈哈"
override func viewDidLoad() {
super.viewDidLoad()
print("isEmpty:\(text.isEmpty)")
print("count:\(text.count == 0)")
print("isBlank:\(text.isBlank)")
print("isReBlank:\(text.isReBlank)")
}
}
extension String{
/// 通過高階函數allSatisfy,判斷字符串是否為空串
var isBlank:Bool{
/// 字符串中的所有字符都符合block中的條件,則返回true
let _blank = self.allSatisfy{
let _blank = $0.isWhitespace
print("字符:\($0) \(_blank)")
return _blank
}
return _blank
}
///通過裁剪字符串中的空格和換行符,將得到的結過進行isEmpty
var isReBlank:Bool{
let str = self.trimmingCharacters(in: .whitespacesAndNewlines)
return str.isEmpty
}
}
-
使用allSatisfy和isWhitespace進行擴展:
allSatisfy是swift中提供的階函數,表示所有元素是否滿足符合設定的條件,并返回bool值。
isWhitespace是Character的一個屬性,用戶判定字符是否是空。
A Boolean value indicating whether this character represents whitespace, including newlines.
For example, the following characters all represent whitespace:
//以下字符均表示空白
"\t" (U+0009 CHARACTER TABULATION)
" " (U+0020 SPACE)
U+2029 PARAGRAPH SEPARATOR
U+3000 IDEOGRAPHIC SPACE
- 代碼思想:
通過
allSatisfy
遍歷字符串中的每個字符,將每個字符做isWhitespace
判斷,如果發現有一個字符返回false
,則結束遍歷,擴展屬性返回當前字符串不為空字符串的判定。/// 通過高階函數allSatisfy,判斷字符串是否為空串 var isBlank:Bool{ /// 字符串中的所有字符都符合block中的條件,則返回true let _blank = self.allSatisfy{ let _blank = $0.isWhitespace print("字符:\($0) \(_blank)") return _blank } return _blank }
eg. 如果text = " ",text.isBlank的結果為true
-
使用trimmingCharacters進行擴展:
-
trimmingCharacters:修剪字符
用于截取字符串,根據CharacterSet的配置處理截取字符串,這里用到了whitespacesAndNewlines,表示將字符串中的空格和換行符去除。
-
characterSet:字符集
字符集,也就是一堆字符的集合,就是說把我們平常見到的單個字符按照一定的條件進行了分類
例如
CharacterSet.whitespacesAndNewlines--空格和換行符 CharacterSet.letters--所有英文字母的集合
-
代碼思想:
將需要校驗的字符串中的空格或換行符刪除,獲得新的字符串,再片段新字符串的isEmpty是否為空,進而校驗完成原始字符串
///通過裁剪字符串中的空格和換行符,將得到的結過進行isEmpty var isReBlank:Bool{ let str = self.trimmingCharacters(in: .whitespacesAndNewlines) return str.isEmpty }
eg. 如果text = " ",經過trimmingCharacters處理后變為text = "",再調用isEmpty,判定字符串為空
-