2016-12-09 30 views
2

大文字小文字を使用すると "ß"が "SS"に変換されることがわかりました。しかし、2つの文字列が大文字と小文字を区別せずに等しいかどうか比較したい。 "gruß"と "GRUß"を比較するときは、 "gru"と "Gru"を比較するときと同じでなければなりません。 ドイツ語で大文字の "ß"はありません!対応する言語では他のキャラクタが利用できないことがわからないので、1:1の大文字の相手がいないキャラクタをすべてフィルタリングできませんでした。 どうすればいいですか?代わりに、上限または小文字に文字列 の変換ドイツ語の大文字小文字の大文字小文字

+0

:https://en.wikipedia.org/wiki/Capital_%E1 %BA%9E –

+0

ありがとう、私はそれを知らなかった。しかし、私は年を取って、別の世紀のすべてのものを学びました! ;-) –

答えて

3

使用caseInsensitiveCompare()

let s1 = "gruß" 
let s2 = "GRUß" 

let eq = s1.caseInsensitiveCompare(s2) == .orderedSame 
print(eq) // true 

これは ユニコード規格に従って大文字と小文字を区別しない方法で文字列を比較します。

ロケール所与の任意に応じてあり、現在のロケールに応じ 比較を行いlocalizedCaseInsensitiveCompare()もあり、大文字と小文字を区別しない比較用

s1.compare(s2, options: .caseInsensitive, locale: ...) 

+0

また、Unicodeマッピングのバリエーションに関する問題を避けるために、 'localizedCaseInsensitiveCompare'とも考えられます。 –

+0

@CaseyFleser:はい、ありがとう! –

+0

それは面白いです。大文字と小文字を区別せずに文字列が等しいかどうかをチェックしたいしかし、私にはそれはGruß!= GrussとGruß==grußとGruß!= GRUSSでなければなりません。その項目が存在するかどうかを迅速に判断するために、辞書のキーとして使用したいと思います。 –

1

「GRUß」は、あなたが主張している理由から、最初は非官能的です。あなたはコンピュータ上で任意のデータを投げることはできませんし、それを正常な方法で処理することを期待することはできません:-)あなたが無効な入力を処理しなければならない場合は、おそらくあなたが知っているくらいの事をきれいにする前処理段階が必要です。

、この作品(スウィフト3.0)と言った:実際に、2008年からドイツでの大文字 'SS' はあり

let grusz = "GRUß" 
let gruss = "GRUSS" 
if grusz.compare(gruss, options: .caseInsensitive) == .orderedSame { 
    print("MATCHES") 
}