Arrays CharacterSet.contains()方法中的奇怪行为,高UTF8字符与ASCII混合
这里的交易:我正在创建一个StringProtocol扩展,以添加基于字符集进行拆分的功能(集合中的任何字符都用于拆分-贪婪比较) 问题是,我很难与同时具有低位ASCII字符和高位UTF8字符的字符集进行比较 如果我只显示UTF8高或ASCII,则匹配效果良好 我创建了一个游乐场来说明这一点 奇怪的结果是倒数第二个打印输出(“Arrays CharacterSet.contains()方法中的奇怪行为,高UTF8字符与ASCII混合,arrays,swift,string,set,nscharacterset,Arrays,Swift,String,Set,Nscharacterset,这里的交易:我正在创建一个StringProtocol扩展,以添加基于字符集进行拆分的功能(集合中的任何字符都用于拆分-贪婪比较) 问题是,我很难与同时具有低位ASCII字符和高位UTF8字符的字符集进行比较 如果我只显示UTF8高或ASCII,则匹配效果良好 我创建了一个游乐场来说明这一点 奇怪的结果是倒数第二个打印输出(“测试字符串2没有空格或笑话。”)。应该说“是的。” 问题是角色集中的空格匹配,但小丑卡不匹配 有什么想法吗?这里是操场: 导入基础 公共扩展协议{ func包含这些(uu字
测试字符串2没有空格或笑话。
”)。应该说“是的。”
问题是角色集中的空格匹配,但小丑卡不匹配
有什么想法吗?这里是操场:
<代码>导入基础
公共扩展协议{
func包含这些(uu字符集:字符集)->Bool{
self.contains中的{(char)
characterset.contains(标量)}
}
}
}
让空格=“”
let joker=“如果字符串包含BMP(基本多语言平面)内外的字符,则
CharacterSet.init(charactersIn string:string)
似乎无法正常工作:
let s=“我以前观察到,CharacterSet
不能很好地处理BMP(基本多语言平面)之外的字符,这可能是因为它继承了NSCharacterSet
。您最好使用集合
。谢谢!让我试一试。整个过程都是为了使它易于使用,但是将一个简单的字符串转换成一个集合应该是可以的。实际上,CharacterSet(charactersIn:both)
似乎被破坏了。使用CharacterSet(都是.unicodeScalars)
可以得到预期的结果。哦……所以转换器坏了。我可能仍然会考虑使用集合,甚至是简单的蛮力比较(这并不适用于工业用途)。但是你的建议很酷。你说得对。如果你用这句话作为回答,我会检查你的。谢谢呜呜!谢谢你的快速周转@MartinR是否应该调用CharacterSet
UnicodeScalarSet
?据我所知,“CharacterSet”中的“Character”与Swift.Character
中的“Character”不同。这一点很好@马丁纳关于石墨烯簇的观点也值得思考。对于这个实用程序,我可能还没有这样做,但这是一个问题。@Alexander:它之所以命名为CharacterSet,是因为它是NSCharacterSet的覆盖值类型(在某种意义上)。“重新命名了它。”@MartinR哦,很有趣,我叫它!:p这是一个遗憾,因为它确实有一些“惊喜”和打破预期。理由是:“我们决定在SWIFT和BASIC之间留下相同类型的名称。当然,这是一个折衷,但它似乎比其他替代方案更好。一致的文档和阻碍对该类型的目的的共同理解将是我们更改名称时面临的最大挑战。”