如何在Swift语言中比较两个忽略大小写的字符串?

ak_*_*agi 86 string ios swift

我们如何在快速忽略的情况下比较两个字符串?例如:

var a = "Cash"
var b = "cash"
Run Code Online (Sandbox Code Playgroud)

如果我们比较var a&var b,是否有任何方法会返回true

iAn*_*rag 176

试试这个 :

对于较旧的swift:

var a : String = "Cash"
var b  : String = "cash"

if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
    println("voila")
}
Run Code Online (Sandbox Code Playgroud)

Swift 3.0和4.1

    var a : String = "Cash"
    var b  : String = "cash"

    if(a.caseInsensitiveCompare(b) == .orderedSame){
        print("voila")
    }
Run Code Online (Sandbox Code Playgroud)

  • 在Swift 3中你需要使用`a.caseInsensitiveCompare(b)== ComparisonResult.orderedSame` (12认同)
  • 注意:`caseInsensitiveCompare(_ :)`不包含在Swift标准库中,而是它是`Foundation`框架的一部分,因此需要`import Foundation`. (2认同)

das*_*ght 33

使用caseInsensitiveCompare方法:

let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"
Run Code Online (Sandbox Code Playgroud)

ComparisonResult以字典顺序告诉你哪个单词比另一个单词更早出现(即哪个单词更靠近字典的前面)..orderedSame意味着字符串最终会出现在字典中的相同位置

  • @Honey `.orderedSame` 是 `ComparisonResult.orderSame` 的缩写...您不必命名类型,因为编译器知道 `caseInsensitiveCompare` 返回一个 `ComparisonResult`。“两个操作数相等”——根据特定的顺序它们相等......显然,“Cash”和“cash”不是相同的字符串值。“但是这里为什么要用‘秩序’这个词呢?” ——因为这是有序比较的结果。其他值是“orderedAscending”和“orderedDescending”......这不仅仅是相同或不同的问题。至于“较小”:字符串就像大基数中的数字。 (2认同)
  • 我觉得这是糟糕的 API 设计。签名不容易阅读......使其更容易阅读...... (2认同)

Ste*_*eve 23

if a.lowercaseString == b.lowercaseString {
    //Strings match
}
Run Code Online (Sandbox Code Playgroud)

  • 不,这是错的.对于一个例子来说,某件事情恰好是无关紧要的.这个黑客根本不"干净".接受的答案给出了正确,清洁的解决方案. (3认同)
  • Pure Swift是去这里的方式.不需要基础. (2认同)
  • 转换案例然后比较是错误的.请参阅问题下的评论. (2认同)
  • @JimBalter我不会说这是“错误的”,因为它回答了OP问题中给出的例子。对于我们这些不需要支持本地化的人来说,这要干净得多! (2认同)

Gre*_*reg 10

试试这个:

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)
Run Code Online (Sandbox Code Playgroud)

结果是NSComparisonResult枚举的类型:

enum NSComparisonResult : Int {

    case OrderedAscending
    case OrderedSame
    case OrderedDescending
}
Run Code Online (Sandbox Code Playgroud)

所以你可以使用if语句:

if result == .OrderedSame {
    println("equal")
} else {
    println("not equal")
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,我想用所有参数显示整个方法. (3认同)

Sau*_*tia 10

正确方法:

let a: String = "Cash"
let b: String = "cash"

if a.caseInsensitiveCompare(b) == .orderedSame {
    //Strings match 
}
Run Code Online (Sandbox Code Playgroud)

请注意: ComparisonResult.orderedSame 也可以简写为 .orderedSame。

其他方法:

一种。

if a.lowercased() == b.lowercased() {
    //Strings match 
}
Run Code Online (Sandbox Code Playgroud)

if a.uppercased() == b.uppercased() {
    //Strings match 
}
Run Code Online (Sandbox Code Playgroud)

C。

if a.capitalized() == b.capitalized() {
    //Strings match 
}
Run Code Online (Sandbox Code Playgroud)


小智 10

localizedCaseInsensitiveContains:通过执行不区分大小写的区域设置搜索来返回接收器是否包含给定的字符串

if a.localizedCaseInsensitiveContains(b) {
    //returns true if a contains b (case insensitive)
}
Run Code Online (Sandbox Code Playgroud)

编辑

caseInsensitiveCompare:返回调用 compare(_:options:) 的结果,其中 NSCaseInsensitiveSearch 作为唯一选项。

if a.caseInsensitiveCompare(b) == .orderedSame {
    //returns true if a equals b (case insensitive)
}
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于比较,而不是遏制。 (2认同)

mat*_*att 6

可以自己推出:

func equalIgnoringCase(a:String, b:String) -> Bool {
    return a.lowercaseString == b.lowercaseString
}
Run Code Online (Sandbox Code Playgroud)

  • 转换大小写然后比较是错误的。请参阅问题下的评论。 (4认同)