是否可以编写一个SWIFT函数来仅替换像👩‍👩‍👧‍👧这样的扩展字素簇的一部分? [英] Is it possible to write a Swift function that replaces only part of an extended grapheme cluster like 👩‍👩‍👧‍👧?

查看:0
本文介绍了是否可以编写一个SWIFT函数来仅替换像👩‍👩‍👧‍👧这样的扩展字素簇的一部分?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想编写一个可以这样使用的函数:

let 👩‍👩‍👧‍👦 = "👩‍👩‍👧‍👧".replacingFirstOccurrence(of: "👧", with: "👦")

给定how odd both this string and Swift's String library are,这在SWIFT中可行吗?

推荐答案

使用range(of:options:range:locale:)解决方案变得非常简洁:

extension String {
    func replaceFirstOccurrence(of searchString: String, with replacementString: String) -> String {
        guard let range = self.range(of: searchString, options: .literal) else { return self }
        return self.replacingCharacters(in: range, with: replacementString)
    }
}
首先在实例中查找searchString的范围,如果找到一个范围,则将该范围替换为replacementString。否则,该实例将自行返回。而且,由于range(of:)方法一找到匹配项就返回,因此保证返回的范围是第一个匹配项。

"221".replaceFirstOccurrence(of: "2", with: "3")                // 321
"👩‍👩‍👧‍👦".replaceFirstOccurrence(of: "u{1f469}", with: "u{1f468}") // 👨‍👩‍👧‍👦

*为澄清起见,最后一个测试用例将女人-女孩-男孩转换为男人-女人-女孩-男孩

这篇关于是否可以编写一个SWIFT函数来仅替换像👩‍👩‍👧‍👧这样的扩展字素簇的一部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆