计算字符串中的总数字字符

时间:2018-12-24 05:46:04

标签: 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
    }
}

if num > 4 {
    print("You Shall Pass!!")
}
else {
    print("You Shall Not Pass!!")
}

但是当我打印数字时,它保持为1。无论我在文本字段中输入多少个数字,它始终会打印1,并且“您不会通过!”

3 个答案:

答案 0 :(得分:4)

这是一种更简单的方法。更改此行,

let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted)

收件人,

let stringArray = password.components(separatedBy: CharacterSet.decimalDigits)

现在数字位数比stringArray中的元素数少一。所以您可以使用它。

if (stringArray.count - 1) > 4 {
    print("You Shall Pass!!")
} else {
     print("You Shall Not Pass!!")
}

答案 1 :(得分:2)

在更快捷的方法中,您可以在filter上使用password string来识别其中的数字频率,例如:

var password = "tHis4is5test8,#pass11" // 45811 - 5 numeric characters
let numsFrequency = password.filter {"0"..."9" ~= $0}.count
print(numsFrequency) // 5

OR

您可以将其添加到Extension中的String中并轻松使用。

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

答案 2 :(得分:1)

另一种方法:

使用正则表达式删除所有非数字字符并计算结果。

let numberOfDigits = password.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression).count