如何比较两个string在Swift语言中忽略大小写?
我们怎样才能比较两个string在快速忽略的情况下? 例如:
var a = "Cash" var b = "cash"
如果我们比较var a&var b,是否有任何方法返回true?
尝试这个 :
var a : String = "Cash" var b : String = "cash" if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){ println("voila") }
Swift 3.0
if(a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame){ print("voila") }
使用caseInsensitiveCompare
方法:
let a = "Cash" let b = "cash" let c = a.caseInsensitiveCompare(b) == .orderedSame println(c) // prints "true"
if a.lowercaseString == b.lowercaseString { //Strings match }
尝试这个:
var a = "Cash" var b = "cash" let result: NSComparisonResult = a.compare(b, options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil, locale: nil) // You can also ignore last two parameters(thanks 0x7fffffff) //let result: NSComparisonResult = a.compare(b, options: NSStringCompareOptions.CaseInsensitiveSearch)
结果是NSComparisonResult枚举的types:
enum NSComparisonResult : Int { case OrderedAscending case OrderedSame case OrderedDescending }
所以你可以使用if语句:
if result == .OrderedSame { println("equal") } else { println("not equal") }
可以推出自己的:
func equalIgnoringCase(a:String, b:String) -> Bool { return a.lowercaseString == b.lowercaseString }
Swift 3
正确的方法:
let a: String = "Cash" let b: String = "cash" if a.caseInsensitiveCompare(b) == .orderedSame { //Strings match }
请注意: ComparisonResult.orderedSame也可以简写为.orderedSame。
其他方法:
一个。
if a.lowercased() == b.lowercased() { //Strings match }
湾
if a.uppercased() == b.uppercased() { //Strings match }
C。
if a.capitalized() == b.capitalized() { //Strings match }
你也可以使所有的字母大写(或小写),看看他们是否是相同的。
var a = “Cash” var b = “CASh” if a.uppercaseString == b.uppercaseString{ //DO SOMETHING }
这将使这两个variables为”CASH”
,因此他们是平等的。
你也可以做一个String
扩展
extension String{ func equalsIgnoreCase(string:String) -> Bool{ return self.uppercaseString == string.uppercaseString } } if "Something ELSE".equalsIgnoreCase("something Else"){ print("TRUE") }
Swift 3
if a.lowercased() == b.lowercased() { }
Swift 3 :你可以定义你自己的操作符,例如~=
。
infix operator ~= func ~=(lhs: String, rhs: String) -> Bool { return lhs.caseInsensitiveCompare(rhs) == .orderedSame }
然后你可以在操场上试试
let low = "hej" let up = "Hej" func test() { if low ~= up { print("same") } else { print("not same") } } test() // prints 'same'
Swift 3:
您还可以使用两个string函数之间的本地化大小写不敏感的比较,并返回Bool
var a = "cash" var b = "Cash" if a.localizedCaseInsensitiveContains(b) { print("Identical") } else { print("Non Identical") }