如何交换字符串中两个字符的所有实例?

问题描述 投票:0回答:1

(这是一个因过于广泛而封闭的问题的解释。该问题最初并未尝试解决该问题。]

我想交换(而不是简单地替换)String中两个字符的所有出现。

例如,我想实现以下目标:

let helloString = "Hello Stack Overflow!"
helloString = helloString.swappingOccurrences(of: "e", and: "o")
print(helloString)

这应该产生

"Holle Stack Ovorflew!"

我可以通过3次致电replacingOccurrences(of:with:)来做到这一点:

let helloString = "Hello Stack Overflow!"
let result1 = helloString.replacingOccurrences(of: "o", with: "_")
let result2 = result1.replacingOccurrences(of: "e", with: "o")
let result3 = result2.replacingOccurrences(of: "_", with: "e")
print(result3)
Holle Stack Ovorflew!

[可行,但是在字符串上执行三遍操作效率很低,它使用了可能在原始字符串中出现的临时字符("_")。

还有更快捷的方法吗?

swift string character swap
1个回答
0
投票

这可以通过将map应用于String来完成。当在map上调用String时,Character的每个String都会传递给map的闭包,然后闭包转换Character。在这种情况下,我们要检查字符是否与第一个字符匹配,并用第二个字符替换,否则,如果它与第二个字符匹配,则用第一个字符替换,否则保持该字符不变。可以使用? :运算符两次来完成此操作。 map的结果将是[Character]Character s的数组),然后可以通过将其传递到String初始化程序将其转换回String

将所有内容一起放入extension上的String中会导致:

extension String {
    func swappingOccurrences(of char1: Character, and char2: Character) -> String {
        return String(self.map { $0 == char1 ? char2 : $0 == char2 ? char1 : $0 })
    }
}

let result = "Hello Stack Overflow!".swappingOccurrences(of: "e", and: "o")
print(result)
Holle Stack Ovorflew!
© www.soinside.com 2019 - 2024. All rights reserved.