gpt4 book ai didi

swift - 为什么两个不重叠的 CharacterSet 的交集非空?

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:56 24 4
gpt4 key购买 nike

我正在尝试使用 CharacterSet 检查用户输入的字符串是否包含任何非十进制数字字符。我使用 CharacterSet.decimalDigits 并将其与用户输入相交。如果这个交叉点是空的,这大概意味着用户没有输入有效的输入。然而,十字路口并非空无一人。

let digits = CharacterSet.decimalDigits
let letters = CharacterSet(charactersIn: "abcd") // never prints

let intersection = digits.intersection(letters)
for c in "abcd".characters {
if intersection.contains(UnicodeScalar(String(c))!) {
print("contains \(c)") // never prints
}
}

for i in 0...9 {
if intersection.contains(UnicodeScalar(String(i))!) {
print("contains \(i)")
}
}

print("intersection is empty: \(intersection.isEmpty)") // prints false

我什至尝试遍历所有 unicode 标量来测试成员资格,但没有打印任何内容。

for i in 0x0000...0xFFFF {
guard let c = UnicodeScalar(i) else {
continue
}
if intersection.contains(c) {
print("contains \(c)")
}
}

为什么集合非空?

注意 使用 let digits = CharacterSet(charactersIn: "1234567890") 按预期工作。我知道 decimalDigits 包含的不仅仅是 0-9,但交集仍应为空。

最佳答案

我浏览了 CharacterSet bugs并且没有看到十字路口周围有人错误地报告 isEmpty,所以如果您有时间应该提交错误,因为这是一个很好的可重现示例。

与此同时,您可以尝试检查输入是否包含来自 .decimalDigits 字符集的任何字符:

let letterInput = CharacterSet(charactersIn: "abcd")
digits.isSubset(of: letterInput.inverted)
// -> true

let letterAndDigitInput = CharacterSet(charactersIn: "abcd 1234")
digits.isSubset(of: letterAndDigitInput.inverted)
// -> false

let digitInput = CharacterSet(charactersIn: "1234")
digits.isSubset(of: digitInput.inverted)
// -> false

关于swift - 为什么两个不重叠的 CharacterSet 的交集非空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com