Anda dapat mengubah keduanya menjadi huruf kecil sebelum melakukan perbandingan.
Dino Tw
9
Hanya untuk dicatat bahwa lowercaseStringyang disebutkan dalam beberapa jawaban akan gagal dalam beberapa bahasa (Straße! =
STRASSE
@ Alladinian bagaimana saran Anda untuk melakukannya. Sebagian besar contoh untuk mengatasi masalah ini menunjukkan konversi ke semua huruf besar atau semua huruf kecil?
Steve
5
@ Steve Apple menyarankan caseInsensitiveCompare:& localizedCaseInsensitiveCompare:sebagai gantinya
Alladinian
3
@ Steve Yakin! (Anda dapat mencoba "Straße".localizedCaseInsensitiveCompare("STRASSE")- Ingatlah untuk mengimpor Foundation)
Alladinian
Jawaban:
14
Coba ini:
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)
Di Swift 3 Anda perlu menggunakana.caseInsensitiveCompare(b) == ComparisonResult.orderedSame
azhidkov
3
Catatan: caseInsensitiveCompare(_:)tidak termasuk dalam Swift Standard Library, melainkan bagian dari Foundationkerangka kerja, sehingga memerlukan import Foundation.
chrisamanse
Apakah ada alasan mengapa ini lebih baik dari a.lowercased() == b.lowercased()?
jowie
@jowie seperti yang disebutkan di komentar lain, menggunakan huruf besar / kecil () mungkin gagal pada bahasa tertentu.
cumanzor
36
Gunakan caseInsensitiveComparemetode:
let a = "Cash"let b = "cash"letc = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"
ComparisonResult memberi tahu Anda kata mana yang muncul lebih awal dari yang lain dalam urutan leksikografik (yaitu kata mana yang lebih dekat ke depan kamus). .orderedSameartinya string akan berakhir di tempat yang sama di kamus
apa .orderedSamemaksudnya The docs hanya mengatakan dua operan adalah sama . Tetapi mengapa kata 'ketertiban' digunakan di sini? Apakah ada urutan atau sesuatu? Dan apa operan kiri lebih kecil dari operan kanan. ( .orderedAscending) berarti untuk string
Honey
1
Hasil Perbandingan @Honey memberi tahu Anda kata mana yang muncul lebih awal dari yang lain dalam urutan leksikografik (yaitu kata mana yang lebih dekat ke depan kamus). .orderedSameartinya string akan berakhir di tempat yang sama di kamus.
Sergey Kalinichenko
1
@Honey .orderedSameadalah kependekan dari ComparisonResult.orderSame... Anda tidak perlu menamai tipe karena kompiler tahu bahwa caseInsensitiveComparemengembalikan file ComparisonResult. "Kedua operan itu sama" - keduanya sama menurut urutan tertentu ... jelas, "Tunai" dan "uang tunai" bukanlah nilai string yang identik. "Tapi kenapa kata 'order' digunakan di sini?" - karena ini adalah hasil dari perbandingan yang teratur. Nilai-nilai lainnya adalah orderedAscendingdan orderedDescending... ini bukan hanya soal yang sama atau berbeda. Adapun "lebih kecil": string seperti angka dalam basis besar.
Jim Balter
1
Saya merasa ini adalah desain API yang buruk. Tanda tangannya tidak mudah dibaca ... Membuatnya a.caseInsensitiveCompare(b, comparing: .orderedSame)akan lebih mudah dibaca ...
Sayang
25
if a.lowercaseString == b.lowercaseString {
//Strings match
}
Pure Swift adalah cara untuk pergi ke sini. Tidak perlu alas bedak.
Alexander - Kembalikan Monica
2
Mengonversi kasus dan kemudian membandingkan adalah salah. Lihat komentar di bawah pertanyaan.
Jim Balter
1
@JimBalter Saya tidak akan mengatakan itu "salah" karena menjawab contoh yang diberikan dalam pertanyaan OP. Bagi kita yang tidak perlu mendukung pelokalan, ini jauh lebih bersih!
toddg
4
^ Tidak, itu salah. Bahwa sesuatu terjadi untuk satu contoh adalah tidak relevan. Hack ini sama sekali tidak "bersih". Jawaban yang diterima memberikan solusi yang benar dan bersih.
Jim Balter
8
JALAN YANG BENAR:
let a: String = "Cash"let b: String = "cash"if a.caseInsensitiveCompare(b) == .orderedSame {
//Strings match
}
Harap diperhatikan: ComparisonResult.orderedSame juga dapat ditulis sebagai .orderedSame dalam singkatan.
CARA LAIN:
Sebuah.
if a.lowercased() == b.lowercased() {
//Strings match
}
b.
if a.uppercased() == b.uppercased() {
//Strings match
}
c.
if a.capitalized() == b.capitalized() {
//Strings match
}
Swift 4, saya menggunakan rute ekstensi String menggunakan caseInsensitiveCompare () sebagai template (tetapi mengizinkan operan menjadi opsional). Inilah taman bermain yang saya gunakan untuk menggabungkannya (baru mengenal Swift jadi umpan balik lebih dari diterima).
Saya tidak meremehkan ini, tetapi perhatikan bahwa ini umumnya ide yang sangat buruk, karena operator pencocokan pola khusus di atas akan lebih diutamakan daripada pencocokan pola asli yang biasanya digunakan saat mencocokkan Stringcontoh satu sama lain (atau ke Stringliteral lain ). Bayangkan let str = "isCAMELcase"sedang beralih, dengan kasus sebagai berikut: case "IsCamelCase": ... . Dengan metode di atas, ini caseakan berhasil dimasukkan, yang tidak diharapkan berasal dari implementasi libs standar Stringpencocokan pola. Jawaban Swift 3 yang diperbarui masih bagus, tapi ...
dfrib
... pertimbangkan untuk menggunakan fungsi khusus (atau Stringekstensi) sebagai pembantu di atas daripada mengganti Stringpencocokan pola default .
Ini tidak berfungsi untuk beberapa string dalam beberapa bahasa ... lihat komentar di bawah pertanyaan, dan banyak jawaban benar, beberapa di antaranya - termasuk yang diterima - mendahului Anda beberapa tahun.
Jim Balter
-2
Cepat 3:
Anda juga dapat menggunakan perbandingan tidak peka huruf besar / kecil yang dilokalkan antara dua fungsi string dan mengembalikannya Bool
var a = "cash"var b = "Cash"if a.localizedCaseInsensitiveContains(b) {
print("Identical")
} else {
print("Non Identical")
}
lowercaseString
yang disebutkan dalam beberapa jawaban akan gagal dalam beberapa bahasa (Straße! =caseInsensitiveCompare:
&localizedCaseInsensitiveCompare:
sebagai gantinya"Straße".localizedCaseInsensitiveCompare("STRASSE")
- Ingatlah untuk mengimporFoundation
)Jawaban:
Coba ini:
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)
hasilnya adalah jenis enum NSComparisonResult:
enum NSComparisonResult : Int { case OrderedAscending case OrderedSame case OrderedDescending }
Jadi Anda bisa menggunakan pernyataan if:
if result == .OrderedSame { println("equal") } else { println("not equal") }
sumber
Coba ini :
Untuk swift yang lebih tua:
var a : String = "Cash" var b : String = "cash" if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){ println("voila") }
Cepat 3+
var a : String = "Cash" var b : String = "cash" if(a.caseInsensitiveCompare(b) == .orderedSame){ print("voila") }
sumber
a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame
caseInsensitiveCompare(_:)
tidak termasuk dalam Swift Standard Library, melainkan bagian dariFoundation
kerangka kerja, sehingga memerlukanimport Foundation
.a.lowercased() == b.lowercased()
?Gunakan
caseInsensitiveCompare
metode:let a = "Cash" let b = "cash" let c = a.caseInsensitiveCompare(b) == .orderedSame print(c) // "true"
ComparisonResult memberi tahu Anda kata mana yang muncul lebih awal dari yang lain dalam urutan leksikografik (yaitu kata mana yang lebih dekat ke depan kamus).
.orderedSame
artinya string akan berakhir di tempat yang sama di kamussumber
.orderedSame
maksudnya The docs hanya mengatakan dua operan adalah sama . Tetapi mengapa kata 'ketertiban' digunakan di sini? Apakah ada urutan atau sesuatu? Dan apa operan kiri lebih kecil dari operan kanan. (.orderedAscending
) berarti untuk string.orderedSame
artinya string akan berakhir di tempat yang sama di kamus..orderedSame
adalah kependekan dariComparisonResult.orderSame
... Anda tidak perlu menamai tipe karena kompiler tahu bahwacaseInsensitiveCompare
mengembalikan fileComparisonResult
. "Kedua operan itu sama" - keduanya sama menurut urutan tertentu ... jelas, "Tunai" dan "uang tunai" bukanlah nilai string yang identik. "Tapi kenapa kata 'order' digunakan di sini?" - karena ini adalah hasil dari perbandingan yang teratur. Nilai-nilai lainnya adalahorderedAscending
danorderedDescending
... ini bukan hanya soal yang sama atau berbeda. Adapun "lebih kecil": string seperti angka dalam basis besar.a.caseInsensitiveCompare(b, comparing: .orderedSame)
akan lebih mudah dibaca ...if a.lowercaseString == b.lowercaseString { //Strings match }
sumber
JALAN YANG BENAR:
let a: String = "Cash" let b: String = "cash" if a.caseInsensitiveCompare(b) == .orderedSame { //Strings match }
Harap diperhatikan: ComparisonResult.orderedSame juga dapat ditulis sebagai .orderedSame dalam singkatan.
CARA LAIN:
Sebuah.
if a.lowercased() == b.lowercased() { //Strings match }
b.
if a.uppercased() == b.uppercased() { //Strings match }
c.
if a.capitalized() == b.capitalized() { //Strings match }
sumber
Bisa gulung sendiri:
func equalIgnoringCase(a:String, b:String) -> Bool { return a.lowercaseString == b.lowercaseString }
sumber
if a.localizedCaseInsensitiveContains(b) { //returns true if a contains b (case insensitive) }
Diedit :
if a.caseInsensitiveCompare(b) == .orderedSame { //returns true if a equals b (case insensitive) }
sumber
Anda juga bisa membuat semua huruf menjadi huruf besar (atau huruf kecil) dan melihat apakah semuanya sama.
var a = “Cash” var b = “CASh” if a.uppercaseString == b.uppercaseString{ //DO SOMETHING }
Ini akan membuat kedua variabel menjadi sama
”CASH”
dan karenanya sama.Anda juga bisa membuat
String
ekstensiextension String{ func equalsIgnoreCase(string:String) -> Bool{ return self.uppercaseString == string.uppercaseString } } if "Something ELSE".equalsIgnoreCase("something Else"){ print("TRUE") }
sumber
Contoh perbandingan nomor telepon; menggunakan swift 4.2
var selectPhone = [String]() if selectPhone.index(where: {$0.caseInsensitiveCompare(contactsList[indexPath.row].phone!) == .orderedSame}) != nil { print("Same value") } else { print("Not the same") }
sumber
Swift 4, saya menggunakan rute ekstensi String menggunakan caseInsensitiveCompare () sebagai template (tetapi mengizinkan operan menjadi opsional). Inilah taman bermain yang saya gunakan untuk menggabungkannya (baru mengenal Swift jadi umpan balik lebih dari diterima).
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
sumber
.orderedSame
daripadaComparisonResult.orderedSame
.Anda bisa menulis Ekstensi String untuk perbandingan hanya dalam beberapa baris kode
extension String { func compare(_ with : String)->Bool{ return self.caseInsensitiveCompare(with) == .orderedSame } }
sumber
Untuk Swift 5 Mengabaikan case dan membandingkan dua string
var a = "cash" var b = "Cash" if(a.caseInsensitiveCompare(b) == .orderedSame){ print("Ok") }
sumber
Cepat 3
if a.lowercased() == b.lowercased() { }
sumber
Swift 3 : Anda dapat menentukan operator Anda sendiri, mis
~=
.infix operator ~= func ~=(lhs: String, rhs: String) -> Bool { return lhs.caseInsensitiveCompare(rhs) == .orderedSame }
Yang kemudian bisa Anda coba di taman bermain
let low = "hej" let up = "Hej" func test() { if low ~= up { print("same") } else { print("not same") } } test() // prints 'same'
sumber
String
contoh satu sama lain (atau keString
literal lain ). Bayangkanlet str = "isCAMELcase"
sedang beralih, dengan kasus sebagai berikut:case "IsCamelCase": ...
. Dengan metode di atas, inicase
akan berhasil dimasukkan, yang tidak diharapkan berasal dari implementasi libs standarString
pencocokan pola. Jawaban Swift 3 yang diperbarui masih bagus, tapi ...String
ekstensi) sebagai pembantu di atas daripada menggantiString
pencocokan pola default .extension String { func equalIgnoreCase(_ compare:String) -> Bool { return self.uppercased() == compare.uppercased() } }
contoh penggunaan
print("lala".equalIgnoreCase("LALA")) print("l4la".equalIgnoreCase("LALA")) print("laLa".equalIgnoreCase("LALA")) print("LALa".equalIgnoreCase("LALA"))
sumber
Cepat 3:
Anda juga dapat menggunakan perbandingan tidak peka huruf besar / kecil yang dilokalkan antara dua fungsi string dan mengembalikannya
Bool
var a = "cash" var b = "Cash" if a.localizedCaseInsensitiveContains(b) { print("Identical") } else { print("Non Identical") }
sumber