在Swift中使用以下比较字符串的方法有没有区别?
let equal = str1.lowercased() == str2.lowercased() // or uppercased()
VS
let equal = str1.caseInsensitiveCompare(str2) == .orderedSame
在任何语言中是否存在任何返回错误结果的情况? 我对Unicode正确性比对性能更感兴趣。
答案 0 :(得分:0)
两者都做同样的事情,lowercased()
或uppercased()
不会影响Unicode字符,因此在比较时最终结果将始终与其他字符串匹配。
这些方法支持所有类型的特殊字符,包括表情符号图标。
与caseInsensitiveCompare
相同;这也会忽略特殊字符,符号等。
答案 1 :(得分:0)
caseInsensitiveCompare
可以更有效率(虽然如果在日常使用中可以观察到它会让我感到震惊)。而且,恕我直言,关于意图更直观。
关于“unicode正确性”,我想这取决于你的意思。例如,将“Straße”与“strasse”进行比较,caseInsensitiveCompare
会说它们是相同的,而lowercased
方法则不会(尽管uppercased
会)。
但是,如果您将Swift 4中的"\u{E9}"
与"\u{65}\u{301}"
进行比较(请参阅2017年WWDC中的unicode正确性讨论What's New in Swift),他们都会正确识别这些是é
和会说他们是一样的,即使这两个字符串有不同数量的unicode标量。