如何在Swift中比较两个字符串而忽略大小写?例如:
var a = "Cash"
var b = "cash"
是否有一种方法,如果我们比较变量a和变量b将返回true?
试试这个:
对于较旧的Swift版本:
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
println("Et voila")
}
Swift 3+
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("Et voila")
}
a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame
。意思是比较字符串a和b是否相等,而且是不区分大小写的比较。 - azhidkovcaseInsensitiveCompare(_:)
不包含在 Swift 标准库中,而是属于 Foundation
框架的一部分,因此需要使用 import Foundation
。 - chrisamansea.lowercased() == b.lowercased()
更好吗? - jowiea.localizedStandardRange(of: b) == a.startIndex..<a.endIndex
对我来说效果更好,而且支持本地化。上述代码并不适用于所有语言(大小写规则可能不同)。此外,如果 a = "Et voila"
和 b = "Et voilà"
,所有的 localized*Compare()
都会返回 false,但实际上应该是 true。 - Tomn使用caseInsensitiveCompare
方法:
let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"
ComparisonResult 会告诉你哪个单词在字典顺序中排在前面(即靠近字典的前面)。.orderedSame
表示这两个字符串会被排在字典中相同的位置。
.orderedSame
”是什么意思?文档只是说“两个操作数相等”。但为什么这里使用了“order”这个词?是否有一些顺序之类的东西?对于字符串,“左操作数小于右操作数”(.orderedAscending
)是什么意思? - mfaani.orderedSame
是 ComparisonResult.orderSame
的简写...你不必命名类型,因为编译器知道 caseInsensitiveCompare
返回一个 ComparisonResult
。"两个操作数相等"——它们根据特定的顺序是相等的......显然,"Cash" 和 "cash" 不是相同的字符串值。"但为什么这里使用了'顺序'这个词?"——因为它是有序比较的结果。其他值是 orderedAscending
和 orderedDescending
......这不仅仅是相同或不同的问题。至于"更小":字符串就像大基数中的数字。 - Jim Baltera.caseInsensitiveCompare(b, comparing: .orderedSame)
会更易读... - mfaaniif 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枚举类型:
enum NSComparisonResult : Int {
case OrderedAscending
case OrderedSame
case OrderedDescending
}
所以你可以使用 if 语句:if result == .OrderedSame {
println("equal")
} else {
println("not equal")
}
localizedCaseInsensitiveContains:通过执行不区分大小写、针对本地化的搜索,返回接收器是否包含给定字符串。
if a.localizedCaseInsensitiveContains(b) {
//returns true if a contains b (case insensitive)
}
编辑:
caseInsensitiveCompare : 使用NSCaseInsensitiveSearch作为唯一选项调用compare(_:options:)的结果。
if a.caseInsensitiveCompare(b) == .orderedSame {
//returns true if a equals b (case insensitive)
}
正确的方式:
let a: String = "Cash"
let b: String = "cash"
if a.caseInsensitiveCompare(b) == .orderedSame {
//Strings match
}
请注意: ComparisonResult.orderedSame还可以缩写为.orderedSame。
其他方式:
a.
if a.lowercased() == b.lowercased() {
//Strings match
}
.if a.uppercased() == b.uppercased() {
//Strings match
}
c.
if a.capitalized() == b.capitalized() {
//Strings match
}
您可以自己制作:
func equalIgnoringCase(a:String, b:String) -> Bool {
return a.lowercaseString == b.lowercaseString
}
var selectPhone = [String]()
if selectPhone.index(where: {$0.caseInsensitiveCompare(contactsList[indexPath.row].phone!) == .orderedSame}) != nil {
print("Same value")
} else {
print("Not the same")
}
extension String {
func compare(_ with : String)->Bool{
return self.caseInsensitiveCompare(with) == .orderedSame
}
}
对于Swift 5 忽略大小写比较两个字符串
最初的回答:
//使用caseInsensitiveCompare方法
let string1 = "Hello" let string2 = "hello" if string1.caseInsensitiveCompare(string2) == .orderedSame { print("The strings are equal!") }
var a = "cash"
var b = "Cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("Ok")
}
lowercaseString
在某些语言中会失败(例如Straße != STRASSE)。 - AlladiniancaseInsensitiveCompare:
和localizedCaseInsensitiveCompare:
,这两个方法可以进行不区分大小写的比较,并且支持本地化。 - Alladinian"Straße".localizedCaseInsensitiveCompare("STRASSE")
- 记得导入Foundation
库) - Alladinian