Swift 计算字符串中的数字字符总数
我试图计算文本字段中输入的字符串中的数字,这是我的代码Swift 计算字符串中的数字字符总数,swift,string,Swift,String,我试图计算文本字段中输入的字符串中的数字,这是我的代码 var num = 0 . . . let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted) for item in stringArray { if let number = Int(item) { print("number: \(number)") num += 1
var num = 0
.
.
.
let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted)
for item in stringArray {
if let number = Int(item) {
print("number: \(number)")
num += 1
}
}
if num > 4 {
print("You Shall Pass!!")
}
else {
print("You Shall Not Pass!!")
}
但是当我打印num时,它保持为1。无论我在文本字段中输入多少个数字,它都会打印1和“你不能通过!!”这是一个更简单的方法。换一行,
let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted)
对,
现在,位数比stringArray
中的元素数少一位。所以你可以用这个
if (stringArray.count - 1) > 4 {
print("You Shall Pass!!")
} else {
print("You Shall Not Pass!!")
}
在更快速的方法中,您可以使用
密码字符串
上的过滤器
来识别其中数字的频率,如:
var password = "tHis4is5test8,#pass11" // 45811 - 5 numeric characters
let numsFrequency = password.filter {"0"..."9" ~= $0}.count
print(numsFrequency) // 5
或
您可以将其添加到扩展名到字符串中,并轻松使用
extension String {
var numbersFrequency: Int {
return String(self.filter { "0"..."9" ~= $0 }).count
}
}
用法
print("1, 2, and 3".numbersFrequency) // 3
print("tHis4is5test8,#pass11".numbersFrequency) //5
let newPassword = "tHis4is5test8,#pass11"
print(newPassword.numbersFrequency) //5
另一种方法:
使用正则表达式删除所有非数字字符并计算结果
let numberOfDigits = password.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression).count
您的输入是什么样子的?谢谢,它工作正常,但我想知道为什么数字小于数组中的元素数?@Nodoodle使用示例打印stringArray
。当你真正看到它时,你会更好地理解它;)
let numberOfDigits = password.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression).count