不区分大小写的字符串比较

时间:2017-11-26 05:15:01

标签: swift unicode string-comparison

在Swift中使用以下比较字符串的方法有没有区别?

let equal = str1.lowercased() == str2.lowercased() // or uppercased()

VS

let equal = str1.caseInsensitiveCompare(str2) == .orderedSame

在任何语言中是否存在任何返回错误结果的情况? 我对Unicode正确性比对性能更感兴趣。

2 个答案:

答案 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标量。