Bagaimana kita bisa membandingkan dua string dalam kasus pengabaian cepat? misalnya:
var a = "Cash"
var b = "cash"
Apakah ada metode yang akan mengembalikan true jika kita membandingkan var a & var b
Bagaimana kita bisa membandingkan dua string dalam kasus pengabaian cepat? misalnya:
var a = "Cash"
var b = "cash"
Apakah ada metode yang akan mengembalikan true jika kita membandingkan var a & var b
lowercaseStringyang disebutkan dalam beberapa jawaban akan gagal dalam beberapa bahasa (Straße! =
caseInsensitiveCompare:& localizedCaseInsensitiveCompare:sebagai gantinya
"Straße".localizedCaseInsensitiveCompare("STRASSE")- Ingatlah untuk mengimpor Foundation)
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")
}
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")
}
a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame
caseInsensitiveCompare(_:)tidak termasuk dalam Swift Standard Library, melainkan bagian dari Foundationkerangka kerja, sehingga memerlukan import Foundation.
a.lowercased() == b.lowercased()?
Gunakan caseInsensitiveComparemetode:
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). .orderedSameartinya string akan berakhir di tempat yang sama di kamus
.orderedSameartinya string akan berakhir di tempat yang sama di kamus.
.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.
a.caseInsensitiveCompare(b, comparing: .orderedSame)akan lebih mudah dibaca ...
if a.lowercaseString == b.lowercaseString {
//Strings match
}
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
}
Bisa gulung sendiri:
func equalIgnoringCase(a:String, b:String) -> Bool {
return a.lowercaseString == b.lowercaseString
}
localizedCaseInsensitiveContains : Mengembalikan apakah penerima berisi string tertentu dengan melakukan pencarian case-insensitive, locale-aware
if a.localizedCaseInsensitiveContains(b) {
//returns true if a contains b (case insensitive)
}
Diedit :
caseInsensitiveCompare : Menampilkan hasil pemanggilan bandingkan (_: options :) dengan NSCaseInsensitiveSearch sebagai satu-satunya opsi.
if a.caseInsensitiveCompare(b) == .orderedSame {
//returns true if a equals b (case insensitive)
}
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 Stringekstensi
extension String{
func equalsIgnoreCase(string:String) -> Bool{
return self.uppercaseString == string.uppercaseString
}
}
if "Something ELSE".equalsIgnoreCase("something Else"){
print("TRUE")
}
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
.orderedSamedaripada ComparisonResult.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
}
}
Cepat 3
if a.lowercased() == b.lowercased() {
}
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'
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 ...
Stringekstensi) sebagai pembantu di atas daripada mengganti Stringpencocokan 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"))
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")
}