Как мы можем сравнить две строки в случайном игнорировании? для например:Как сравнить две строки, игнорируя случай на языке Swift?
var a = "Cash"
var b = "cash"
Есть ли метод, который возвращает истину, если мы сравним Var & Var Аргументы B
Как мы можем сравнить две строки в случайном игнорировании? для например:Как сравнить две строки, игнорируя случай на языке Swift?
var a = "Cash"
var b = "cash"
Есть ли метод, который возвращает истину, если мы сравним Var & Var Аргументы B
Попробуйте это:
Для старшего скор:
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
println("voila")
}
Swift 3,0
if(a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame){
print("voila")
}
В Swift 3 вам нужно использовать 'a.caseInsensitiveCompare (b) == ComparisonResult.orderedSame' – azhidkov
Примечание:' caseInsensitiveCompare (_ :) 'не входит в стандартную библиотеку Swift, а является частью структуры' Foundation' , поэтому требуется «import Foundation». – chrisamanse
Я не могу быть единственным, кто любит распечатку voila. – the4kman
Попробуйте это:
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")
}
Если я правильно помню, параметры диапазона и локали являются необязательными и могут быть полностью исключены. –
Да, я действительно хотел показать весь метод со всеми параметрами. – Greg
У вас должен быть правильный ответ здесь. Сравнение строк - это не только знание того, являются ли они равными или нет. – Mikael
Может просто свернуть свой собственный:
func equalIgnoringCase(a:String, b:String) -> Bool {
return a.lowercaseString == b.lowercaseString
}
Преобразование случая, а затем сравнение неверно. См. Комментарии по этому вопросу. –
if a.lowercaseString == b.lowercaseString {
//Strings match
}
Pure Swift - это путь сюда. Нет необходимости в фундаменте. – Alexander
Преобразование случая, а затем сравнение неверно. См. Комментарии по этому вопросу. –
@JimBalter Я бы не сказал, что это «неправильно», так как он отвечает на пример, заданный в вопросе OP. Для тех из нас, кто не нуждается в поддержке локализации, это намного чище! – toddg
Вы также могли бы сделать все буквы в верхний регистр (или строчные) и посмотреть, если они одинаковы.
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")
}
Преобразование случая, а затем сравнение неверно. См. Комментарии по этому вопросу. –
Используйте caseInsensitiveCompare
метод:
let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
println(c) // prints "true"
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 ": ...'. С помощью вышеописанного метода этот «случай» будет введен успешно, что не ожидается, исходя из стандартной реализации libs шаблона «String». Обновленный ответ Swift 3 по-прежнему хорош, но ... – dfri
... рассмотрите возможность использования настраиваемой функции (или 'String' extension) в качестве помощника выше, а не переопределения соответствия шаблону' String' по умолчанию. – dfri
Swift 3:
Вы также можете использовать локализованы регистрозависимости сравнение между функцией двух строк и возвращает Bool
var a = "cash"
var b = "Cash"
if a.localizedCaseInsensitiveContains(b) {
print("Identical")
} else {
print("Non Identical")
}
Swift 3
ПРАВИЛЬНЫЙ ПУТЬ:
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
}
гр.
if a.capitalized() == b.capitalized() {
//Strings match
}
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 4, я пошел маршрут расширения строки с помощью 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
localizedCaseInsensitiveContains: Возвращает приемник содержит ли данную строку, выполняя регистронезависимый, локализованный в курсе поиска
if a.localizedCaseInsensitiveContains(b) {
//returns true if a contains b (case insensitive)
}
Вы можете конвертировать и в нижний регистр, прежде чем делать сравнение , –
Просто отметим, что 'lowercaseString', упомянутый в некоторых ответах, не будет работать на некоторых языках (например, Straße! = STRASSE) – Alladinian
@ Alladinian, как бы вы предложили сделать это тогда. Большинство примеров для решения этой проблемы показывают преобразование либо во все верхние регистры, либо во все нижние регистры? – Steve