我需要把一个阿拉伯语单词分解成它的辅音和元音.例如,"ضَرَبَ"有三个辅音和三个元音,因此我希望它的长度是6而不是3.然而:
let t = "ضَرَبَ"
let ud = t.decomposedStringWithCanonicalMapping
print("ud Length = \(ud.count)")
我得了3分而不是6分...如何将该字符串分解为以下数组:
"\u{0636}\u{064e}\u{0631}\u{064e}\u{0628}\u{064e}"
我需要把一个阿拉伯语单词分解成它的辅音和元音.例如,"ضَرَبَ"有三个辅音和三个元音,因此我希望它的长度是6而不是3.然而:
let t = "ضَرَبَ"
let ud = t.decomposedStringWithCanonicalMapping
print("ud Length = \(ud.count)")
我得了3分而不是6分...如何将该字符串分解为以下数组:
"\u{0636}\u{064e}\u{0631}\u{064e}\u{0628}\u{064e}"
您的目标是在应用标准化后考虑Unicode代码点,而不是SWIFT Character
(即扩展字素集群)的集合.你可以用.unicodeScalars
来做到这一点:
print("ud Length = \(ud.unicodeScalars.count)") // ud Length = 6
^^^^^^^^^^^^^^
记住,这不仅仅是"辅音和元音".像shaddah和nunation这样的东西在标准化后也将是代码点(我认为这对您的用例是有好处的;只是要记住一些东西).
您提出的关于"将此字符串分解为以下数组"的问题有些误导.您给出的示例是一个字符串,而不是一个array.但重要的是,它是the same String as 100.(用==
判断它.)但是,如果您需要UnicodeScalars数组,则应该是Array(ud.unicodeScalars)
.