大文字小文字を無視してSwiftの2つの文字列を比較するにはどうすればよいですか?例えば:
var a = "Cash"
var b = "cash"
Var aとvar bを比較するとtrueを返すメソッドはありますか
これを試して :
古いSwiftの場合:
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
println("voila")
}
Swift 3.0および4.1
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("voila")
}
caseInsensitiveCompare
メソッドを使用します。
let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"
ComparisonResult は、どちらのWordが辞書式順序で他のWordより早いかを示します(つまり、どちらが辞書の前に近づいているか)。 .orderedSame
は、文字列が辞書の同じ場所に配置されることを意味します
if a.lowercaseString == b.lowercaseString {
//Strings match
}
これを試して:
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")
}
あなた自身を転がすことができます:
func equalIgnoringCase(a:String, b:String) -> Bool {
return a.lowercaseString == b.lowercaseString
}
Swift
正しい方法:
let a: String = "Cash"
let b: String = "cash"
if a.caseInsensitiveCompare(b) == .orderedSame {
//Strings match
}
注意してください: ComparisonResult.orderedSameは、.orderedSameと略記することもできます。
その他の方法:
a。
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.2を使用
var selectPhone = [String]()
if selectPhone.index(where: {$0.caseInsensitiveCompare(contactsList[indexPath.row].phone!) == .orderedSame}) != nil {
print("Same value")
}
else {
print("Not the same")
}
すべての文字を大文字(または小文字)にして、それらが同じかどうかを確認することもできます。
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")
}
localizedCaseInsensitiveContains:大文字と小文字を区別しない、ロケールを意識した検索を実行して、レシーバーに指定の文字列が含まれているかどうかを返します
if a.localizedCaseInsensitiveContains(b) {
//returns true if a contains b (case insensitive)
}
編集済み:
caseInsensitiveCompare:NSCaseInsensitiveSearchを唯一のオプションとしてcompare(_:options :)を呼び出した結果を返します。
if a.caseInsensitiveCompare(b) == .orderedSame {
//returns true if a equals b (case insensitive)
}
ほんの数行のコードで、比較のために文字列拡張機能を書くことができます
extension String {
func compare(_ with : String)->Bool{
return self.caseInsensitiveCompare(with) == .orderedSame
}
}
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 5の場合、大文字と小文字を無視して2つの文字列を比較します
var a = "cash"
var b = "Cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("Ok")
}
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