在字符串类型数组中,我如何实现功能,就像检查字符串中的空格一样?我想检查数组是否只包含空格
var stringExample: String!
var stringArrayExample: [String]!
if stringExample.trimmingCharacters(in: .whitespaces).isEmpty{
//string contains whitespace characters
}
答案 0 :(得分:1)
var someStrings = [" ", "foo", "bar", "\t"]
let result = someStrings.filter { $0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty }
print(result) // [" ", "\t"]
如果您只是想知道字符串数组是否所有只有空格的字符串,您可以将最后两行更改为:
let result = someStrings.filter { $0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false }
print(result.isEmpty) // false
请注意,如果您不想要新行,请使用.whitespacesAndNewlines
,只需像原始示例中那样使用.whitespaces
。
答案 1 :(得分:0)
我为String
创建了一个扩展,它返回它是空的还是只包含空格:
extension String {
var isEmptyOrWhitespace : Bool {
return self.trimmingCharacters(in: .whitespaces).isEmpty
}
}
因为我也是.NET开发人员,喜欢方法Any
,All
等等。我还为Array
类型创建了一个扩展,让我查看数组中每个元素的条件,利用reduce
函数:
extension Array {
func all(test: (Element) -> Bool) -> Bool {
return self.reduce(true) { $0 && test($1) }
}
}
然后你可以结合这两个来获得一个相当不错的语法,这也是相当高效的,因为当它偶然发现一个不符合提供的测试的元素时会“中断”(使用for
代替reduce
可能会更有效率。)
let strings1 = [" ", "", "\t"]
print(strings1.all { $0.isEmptyOrWhitespace }) // true
print(strings1.all { !$0.isEmptyOrWhitespace }) // false
通过在测试中打印,您可以看到它在找到第一个不合规的元素时不再执行元素测试。
let strings2 = [" ", "x", "\t"]
print(strings2.all(test: { (str) -> Bool in
let e = str.isEmptyOrWhitespace
print ("[\(str)]: \(e)")
return e
}))
打印:
[ ]: true
[x]: false
false