使用字形vs拆分的UTF-8字符串数组

时间:2015-10-07 22:03:17

标签: arrays string utf-8 julia

使用graphemes优于split从UTF-8字符串创建数组是否有优势?

例如,请考虑以下事项:

# Define a UTF-8 string with a bunch of multibyte characters
s = "{(-n↑⍵÷⊃⊖⍵),⍨⍉1↓⍉∘.=⍨⍳n←1-⍨≢⍵}"

# Create an array using split
split(s, "")

# Create an array using graphemes (v0.4+)
collect(graphemes(s))

两种方法都产生预期的输出。事实上,

split(s, "") == collect(graphemes(s))

返回true

这两种方法似乎始终如一地产生相同的结果。一种方法通常优于另一种方法,无论是性能,风格还是其他方式?

(注意graphemes返回迭代器而不是数组,因此返回collect。)

1 个答案:

答案 0 :(得分:7)

取决于您的需求。 graphemes()将返回用户认为是单个字符的内容,即使它们可能包含多个代码点;例如,与重音符号组合的字母是单个字素。 split()不是这种情况。

考虑一个+◌。在此示例中,split()将两个代码点作为单独的字符返回,而graphemes()将返回单个字符。