Unicode 如何检索第一个“;完成”;[]符文的字符?
我正在尝试写一个函数Unicode 如何检索第一个“;完成”;[]符文的字符?,unicode,go,rune,Unicode,Go,Rune,我正在尝试写一个函数 func Anonymize(name string) string 匿名的名字。下面是一些输入和输出对的示例,让您了解它应该做什么: Müller → M. von der Linden → v. d. L. Meyer-Schulze → M.-S. 此函数应该用于由任意字符组成的名称。在执行此功能时,我有以下问题: 给定一个[]符文或字符串,我如何计算得到一个完整的字符需要多少符文,在这个意义上,与该字符对应的所有修饰符和组合重音也都是完整的。例如,如果输入是[]
func Anonymize(name string) string
匿名的名字。下面是一些输入和输出对的示例,让您了解它应该做什么:
Müller → M.
von der Linden → v. d. L.
Meyer-Schulze → M.-S.
此函数应该用于由任意字符组成的名称。在执行此功能时,我有以下问题:
给定一个[]符文
或字符串
,我如何计算得到一个完整的字符需要多少符文,在这个意义上,与该字符对应的所有修饰符和组合重音也都是完整的。例如,如果输入是[]符文{0x0041,0x0308,0x0066,0x0067}
(对应于字符串ÄBC,其中Ä表示为A和组合diaresis的组合),则函数应返回2,因为前两个符文产生第一个字符,即Ä。如果我只取第一个符文,我会得到一个不正确的
我需要这个问题的答案,因为我想匿名的名字可能以重音字符开头,我不想删除重音。您可以尝试以下功能(灵感来自“”): 见: 输出:
ÄfÄg 6 2
该字符串可能使用6个符文,但它的第一个字位使用2个符文
他们使用了另一种方法,使用
IsMark
报告符文是否为标记字符(M类)
来源(来自FUZxxl)包括:
// take one character including all modifiers from the last name
r, _, err := ln.ReadRune()
if err != nil {
/* ... */
}
aln = append(aln, r)
for {
r, _, err = ln.ReadRune()
if err != nil {
goto done
}
if !unicode.IsMark(r) {
break
}
aln = append(aln, r)
}
aln = append(aln, '.')
/* ... */
这很有帮助,尽管我在实际代码中没有使用正则表达式。事实上,这是一个很好的例子。我已将您的解决方案包含在答案中,以提高可见性。
ÄfÄg 6 2
// take one character including all modifiers from the last name
r, _, err := ln.ReadRune()
if err != nil {
/* ... */
}
aln = append(aln, r)
for {
r, _, err = ln.ReadRune()
if err != nil {
goto done
}
if !unicode.IsMark(r) {
break
}
aln = append(aln, r)
}
aln = append(aln, '.')
/* ... */