Как мы можем сравнить две строки в быстром игнорировании? например:
var a = "Cash"
var b = "cash"
Есть ли какой-нибудь метод, который вернет истину, если мы сравним var a и var b
Как мы можем сравнить две строки в быстром игнорировании? например:
var a = "Cash"
var b = "cash"
Есть ли какой-нибудь метод, который вернет истину, если мы сравним var a и var b
lowercaseStringчто это упомянуто в некоторых ответах не удастся на некоторых языках (например, Straße! = STRASSE)
caseInsensitiveCompare:и localizedCaseInsensitiveCompare:вместо этого
"Straße".localizedCaseInsensitiveCompare("STRASSE")- не забудьте импортировать Foundation)
Ответы:
Попробуй это:
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")
}
Попробуй это :
Для более старых свифтов:
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
println("voila")
}
Swift 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"
ComparisonResult сообщает вам, какое слово идет раньше другого в лексикографическом порядке (т. Е. Какое слово идет ближе к началу словаря). .orderedSameозначает, что строки окажутся в одном месте в словаре
.orderedSameзначит? В документах просто сказать два операнд равен . Но почему здесь используется слово «порядок»? Есть последовательность или что-то в этом роде? А что значит Левый операнд меньше правого. ( .orderedAscending) означает для строк
.orderedSameозначает, что строки окажутся в одном месте в словаре.
.orderedSame- это сокращение от ComparisonResult.orderSame... вам не нужно называть тип, поскольку компилятор знает, что caseInsensitiveCompareвозвращает ComparisonResult. «Два операнда равны» - они равны согласно определенному порядку ... очевидно, «Cash» и «cash» не являются идентичными строковыми значениями. «Но почему здесь используется слово« порядок »?» - потому что это результат упорядоченного сравнения. Другие ценности orderedAscendingи 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
}
б.
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 : возвращает результат вызова compare (_: options :) с NSCaseInsensitiveSearch в качестве единственной опции.
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, я пошел по маршруту расширения String, используя caseInsensitiveCompare () в качестве шаблона (но позволяя операнду быть необязательным). Вот площадка, которую я использовал для сборки (новинка в 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.
Вы можете просто написать расширение String для сравнения всего в нескольких строчках кода.
extension String {
func compare(_ with : String)->Bool{
return self.caseInsensitiveCompare(with) == .orderedSame
}
}
Swift 3
if a.lowercased() == b.lowercased() {
}
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"))
Swift 3:
Вы также можете использовать локализованное сравнение двух строк без учета регистра, и оно возвращает Bool
var a = "cash"
var b = "Cash"
if a.localizedCaseInsensitiveContains(b) {
print("Identical")
} else {
print("Non Identical")
}