如何快速忽略大小写比较两个字符串?例如:
var a = "Cash"
var b = "cash"
如果我们比较var a和var b是否有任何方法可以返回true
如何快速忽略大小写比较两个字符串?例如:
var a = "Cash"
var b = "cash"
如果我们比较var a和var b是否有任何方法可以返回true
lowercaseString
某些答案中提到的某些语言会失败(例如,Straße!= STRASSE)
caseInsensitiveCompare:
和localizedCaseInsensitiveCompare:
替代
"Straße".localizedCaseInsensitiveCompare("STRASSE")
-记住要导入Foundation
)
Answers:
试试这个:
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")
}
试试这个 :
对于较早的Swift:
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
println("voila")
}
迅捷3+
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("voila")
}
a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame
caseInsensitiveCompare(_:)
不包含在Swift标准库中,而是Foundation
框架的一部分,因此需要import Foundation
。
a.lowercased() == b.lowercased()
吗?
使用caseInsensitiveCompare
方法:
let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"
compareResult会告诉您哪个单词在字典顺序上比另一个单词早(即哪个单词更靠近字典的开头)。.orderedSame
表示字符串将在字典中的相同位置结束
.orderedSame
表示字符串将在字典中的同一位置结束。
.orderedSame
的缩写ComparisonResult.orderSame
。。。您不必命名类型,因为编译器知道会caseInsensitiveCompare
返回a ComparisonResult
。“两个操作数相等”-根据特定顺序它们相等...显然,“现金”和“现金”不是相同的字符串值。“但是为什么在这里使用'order'这个词呢?” -因为这是有序比较的结果。其他值是orderedAscending
and orderedDescending
...这不只是一个相同或不同的问题。至于“较小”:字符串就像一个大底数中的数字。
a.caseInsensitiveCompare(b, comparing: .orderedSame)
更具可读性...
if a.lowercaseString == b.lowercaseString {
//Strings match
}
正确的方法:
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
}
b。
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
}
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)
}
您还可以将所有字母都大写(或小写),看看它们是否相同。
var a = “Cash”
var b = “CASh”
if a.uppercaseString == b.uppercaseString{
//DO SOMETHING
}
这将使两个变量”CASH”
均相等,因此它们相等。
您也可以String
扩展
extension String{
func equalsIgnoreCase(string:String) -> Bool{
return self.uppercaseString == string.uppercaseString
}
}
if "Something ELSE".equalsIgnoreCase("something Else"){
print("TRUE")
}
Swift 4,我使用caseInsensitiveCompare()作为模板走了String扩展路线(但允许操作数是可选的)。这是我以前把它放在一起的操场(对Swift来说是新的,所以反馈非常受欢迎)。
import UIKit
extension String {
func caseInsensitiveEquals<T>(_ otherString: T?) -> Bool where T : StringProtocol {
guard let otherString = otherString else {
return false
}
return self.caseInsensitiveCompare(otherString) == ComparisonResult.orderedSame
}
}
"string 1".caseInsensitiveEquals("string 2") // false
"thingy".caseInsensitiveEquals("thingy") // true
let nilString1: String? = nil
"woohoo".caseInsensitiveEquals(nilString1) // false
.orderedSame
而不是ComparisonResult.orderedSame
。
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'
String
实例彼此之间(或其他String
文字)进行匹配时通常使用的本机模式匹配。想象一下,let str = "isCAMELcase"
正在切换,情况如下:case "IsCamelCase": ...
。使用上面的方法,case
可以成功输入该值,这不会来自String
模式匹配的标准库实现。更新的Swift 3答案虽然仍然不错,但是...
String
扩展名)作为上述的帮助程序,而不是覆盖默认的String
模式匹配。
extension String
{
func equalIgnoreCase(_ compare:String) -> Bool
{
return self.uppercased() == compare.uppercased()
}
}
使用样本
print("lala".equalIgnoreCase("LALA"))
print("l4la".equalIgnoreCase("LALA"))
print("laLa".equalIgnoreCase("LALA"))
print("LALa".equalIgnoreCase("LALA"))
斯威夫特3:
您还可以在两个字符串函数之间使用本地化的不区分大小写的比较,并返回 Bool
var a = "cash"
var b = "Cash"
if a.localizedCaseInsensitiveContains(b) {
print("Identical")
} else {
print("Non Identical")
}