大文字と小文字を区別せずに2つの文字列を比較するにはどうすればよいですか?例:
var a = "Cash"
var b = "cash"
var aとvar bを比較した場合にtrueを返すメソッドはありますか
大文字と小文字を区別せずに2つの文字列を比較するにはどうすればよいですか?例:
var a = "Cash"
var b = "cash"
var aとvar bを比較した場合にtrueを返すメソッドはありますか
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
文字列が辞書の同じ場所に配置されることを意味します。
.orderedSame
は略してComparisonResult.orderSame
...コンパイラはをcaseInsensitiveCompare
返すことを知っているので、型に名前を付ける必要はありませんComparisonResult
。「2つのオペランドは等しい」-特定の順序に従って等しい...明らかに、「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と略記することもできます。
他の方法:
a。
if a.lowercased() == b.lowercased() {
//Strings match
}
b。
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:NSCaseInsensitiveSearchを唯一のオプションとしてcompare(_:options :)を呼び出した結果を返します。
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、私は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
。
わずか数行のコードで比較のために文字列拡張を書くことができます
extension String {
func compare(_ with : String)->Bool{
return self.caseInsensitiveCompare(with) == .orderedSame
}
}
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
パターンマッチングの標準libs実装からの予想ではありません。更新された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"))
スウィフト3:
2つの文字列関数間でローカライズされた大文字と小文字を区別しない比較を使用することもできます。 Bool
var a = "cash"
var b = "Cash"
if a.localizedCaseInsensitiveContains(b) {
print("Identical")
} else {
print("Non Identical")
}