这是将西里尔字母替换为拉丁字母的代码:
let cyr = ["а", "б", "в", "г", "д", "Б"]
let latin = ["a", "b", "v", "g", "d", "B"]
var original = self.input.text
for i in 0..<cyr.count {
let target = cyr[i]
let destination = latin[i]
original = original?.replacingOccurrences(of: target, with: destination, options: String.CompareOptions(rawValue: NSString.CompareOptions.caseInsensitive.rawValue | NSString.CompareOptions.literal.rawValue), range: nil)
self.output.text = original;
但如果我将它们添加到数组中,它不会将大写符号替换为大写符号。它要么将所有小写字母替换为大写字母,要么将所有小写字母替换为大写字母。如何区分是大写还是小写并分别替换?
最佳答案
当您需要区分大小写的搜索和替换时,您不应使用 caseInsensitive
选项。您的代码也可以简化为
let cyr = ["а", "б", "в", "г", "д", "Б"]
let latin = ["a", "b", "v", "g", "d", "B"]
var text = "абвгдБ"
for (src, dest) in zip(cyr, latin) {
text = text.replacingOccurrences(of: src, with: dest)
}
print(text) // abvgdB
话虽如此,您真正想要的可能是音译到拉丁语:
let original = "абвгдБ"
let trans = original.applyingTransform(.toLatin, reverse: false) ?? original
print(trans) // abvgdB
关于arrays - Swift:如何替换数组中的大写符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56072775/