我发现,当使用uppercased()时,“ß”会转换为“SS”。但是我希望比较两个字符串是否相等而不区分大小写。 因此,当将“gruß”与“GRUß”进行比较时,它应该与将“gru”与“Gru”进行比较时相同。 德语中没有大写的“ß”!因为我不知道相应语言中没有哪些其他字符,所以我无法过滤掉所有没有1:1大写对手的字符。 我该怎么办?
答案 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: ...)
根据任意给定的不区分大小写的比较 区域设置。
答案 1 :(得分:1)
嗯,“GRUß”首先是非感性的,因为你说的理由。你不能在计算机上抛出任意数据并期望它以理智的方式处理它:-)如果你必须处理无效的输入,你应该有一个预处理阶段来清理你知道的垃圾。
话虽如此,这有效(Swift 3.0):
let grusz = "GRUß"
let gruss = "GRUSS"
if grusz.compare(gruss, options: .caseInsensitive) == .orderedSame {
print("MATCHES")
}