检查字符串类型数组中的空格 - Swift

时间:2017-05-30 19:16:37

标签: swift

在字符串类型数组中,我如何实现功能,就像检查字符串中的空格一样?我想检查数组是否只包含空格

 var stringExample: String!
 var stringArrayExample: [String]!

 if stringExample.trimmingCharacters(in: .whitespaces).isEmpty{
 //string contains whitespace characters
 } 

2 个答案:

答案 0 :(得分:1)

如果我理解你想要的东西,那么Swift 3会看起来像这样:

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开发人员,喜欢方法AnyAll等等。我还为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