【问题标题】:German character ß uppercased in SSCSS中的德语字符ß大写
【发布时间】:2016-12-09 11:57:50
【问题描述】:

我发现,当使用大写()时,“ß”会转换为“SS”。但是我想比较两个字符串是否相等而不区分大小写。 因此,当比较“gruß”和“GRUß”时,它应该与比较“gru”和“Gru”时相同。 德语中没有大写的“ß”!因为我不知道哪些其他字符在相应的语言中不可用,所以我无法过滤所有没有 1:1 大写对手的字符。 我能做什么?

【问题讨论】:

  • 实际上,从 2008 年开始,德语中就有一个大写的“ß”:en.wikipedia.org/wiki/Capital_%E1%BA%9E
  • 谢谢,我不知道。但我老了,在不同的世纪学到了所有的东西! ;-)

标签: swift uppercase lowercase


【解决方案1】:

使用caseInsensitiveCompare() 而不是转换字符串 大写或小写:

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

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

这会根据不区分大小写的方式比较字符串 Unicode 标准。

还有localizedCaseInsensitiveCompare() 根据当前语言环境进行比较,以及

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

根据任意给定的不区分大小写的比较 语言环境。

【讨论】:

  • 您也可以考虑localizedCaseInsensitiveCompare,这将避免 unicode 映射变化的问题。
  • 这很有趣。我想检查某些字符串是否相等而不区分大小写。但对我来说,它应该是 Gruß != Gruss 和 Gruß == gruß 和 Gruß != GRUSS。我想将它用作字典中的键来快速确定该项目是否存在。
  • @PeterSilie:在这种情况下,s1.lowercased() == s2.lowercased() 应该会给出预期的结果。但请注意,在进行不区分大小写的比较时,“ß”和“SS”相等的。
  • @Martin:谢谢,真是天才!我认为。 :-)
【解决方案2】:

嗯,“GRUß”首先是没有意义的,因为你说的原因。您不能将任意数据扔到计算机上并期望它以理智的方式处理它:-) 如果您必须处理无效输入,您可能应该有一个预处理阶段来清理您所知道的废话。

话虽如此,这行得通(Swift 3.0):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多