2016-12-09 3 views
2

Я понял, что «ß» преобразуется в «SS» при использовании uppercased(). Но я хочу сравнить, если две строки равны, не будучи чувствительными к регистру. Итак, при сравнении «gruß» с «GRUß» он должен быть таким же, как и при сравнении «gru» с «Gru». В немецком языке нет прописных букв «ß»! Поскольку я не знаю, какие другие символы недоступны на соответствующих языках, я не мог отфильтровать все персонажи, у которых не было 1: 1 противник. Что мне делать?Германский символ ß верхний регистр в SS

+0

На самом деле, с 2008 года существует прописная 'ß' на немецком языке: 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 

Это сравнивает строки в регистронезависимом способом в соответствии с Стандарт Unicode.

Существует также localizedCaseInsensitiveCompare(), который делает сравнение в соответствии с текущей локализацией и

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

для учета регистра сравнения в соответствии с произвольной заданной местности.

+0

Вы также можете рассмотреть также 'localizedCaseInsensitiveCompare', который позволит избежать проблем с изменениями в юникод-сопоставлениях. –

+0

@CaseyFleser: Да, спасибо! –

+0

Это интересно. Я хочу проверить, равны ли какие-то строки без учета регистра. Но для меня это должен быть Gruß! = Gruss и Gruß == gruß и Gruß! = GRUSS. Я хочу использовать его в качестве ключа в словаре, чтобы быстро определить, существует ли этот элемент. –

1

Ну, «GRUß» является нечувствительным в первую очередь по причинам, о которых вы заявляете. Вы не можете бросать произвольные данные на компьютер и ожидать, что он обработает его разумным способом :-) Если вам приходится иметь дело с недопустимым вводом, вы, вероятно, должны иметь фазу предварительной обработки, которая очищает дерьмо, о котором вы знаете.

Сказав, что это работает (Swift 3.0):

let grusz = "GRUß" 
let gruss = "GRUSS" 
if grusz.compare(gruss, options: .caseInsensitive) == .orderedSame { 
    print("MATCHES") 
} 
Смежные вопросы