【问题标题】:Why is the intersection of two non-overlapping CharacterSets non-empty?为什么两个不重叠的字符集的交集是非空的?
【发布时间】:2017-05-24 23:31:40
【问题描述】:

我试图使用 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,但交集应该仍然是空的。

【问题讨论】:

  • bugs.swift.org 有几个关于字符集的错误报告。
  • 很好.. 我只是枚举了0x0000...0xFFFF 以查看 .decimalDigits 中的其他字符,我不知道它超过了 0...9
  • @MathewS:如果您有兴趣:here 是一些(Objective-C 和)Swift 方法,用于从 CharacterSet 中获取所有字符。 “数字”有550个,如“꩓”(CHAM DIGIT THREE)、“໔”(LAO DIGIT FOUR)或“????” (数学双击数字一)
  • @MartinR 谢谢.. Cham 字母很漂亮!

标签: swift swift3


【解决方案1】:

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

同时,您可以试试这个来检查输入是否包含来自.decimalDigits characterSet 的任何字符:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2014-04-02
    • 2011-02-05
    相关资源
    最近更新 更多