一、前言
开发的过程中经常要判断字符串是否为空,包括包含多个空格的字符串,如" "
,这个字符串在程序中也要判别为空串。那么如何判断字符串为空呢
二、系统提供的方法
可以用系统原生的方法判断
-
通过字符串自带的属性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,判定字符串为空
-
网友评论