在咱國(guó)內(nèi)有很多有趣的文字,其中藏文屬于有趣的文字里面特別有趣的一項(xiàng),特別是對(duì)于做文本庫(kù)的同學(xué),大概都知道什么叫合寫字吧。合寫字的含義就是多個(gè)字符一起組成一個(gè)字。但是多個(gè)字符在內(nèi)存中,本身就是多個(gè)字符對(duì)象,以往統(tǒng)計(jì)某個(gè)字符串的字?jǐn)?shù),咱簡(jiǎn)單判斷只是拿字符串的字符數(shù)量進(jìn)行獲取。這個(gè)方法在藏文下肯定是不可行的,藏文的一個(gè)字由多個(gè)字符組成,因此需要本文介紹的特別的方法
先給大家來一個(gè)簡(jiǎn)單的藏文字 ????? 這個(gè)字其實(shí)是由 ? + ? + ? + ? + ? 這幾個(gè)字符組成的
用 string.Length 獲取到的 ????? 這個(gè)字也是符合預(yù)期 5 個(gè)字符,當(dāng)然這也是不符合預(yù)期的字?jǐn)?shù)
這是關(guān)于語言文化方面的內(nèi)容,自己寫一定是不靠譜的。好在 .NET 里面提供的權(quán)威的獲取方法,通過 StringInfo 類的輔助,可以獲取可視效果下的字符串的字?jǐn)?shù)
var info = new StringInfo("?????");
var realLength = info.LengthInTextElements; // realLength = 1
通過此即可獲取正確的字符長(zhǎng)度
額外的,如果想要枚舉一個(gè)藏文句子的每個(gè)藏文的字。那肯定不能使用字符的遍歷方式,否則輸出就和漢字的遍歷輸出為偏旁一樣了。遍歷藏文,需要使用 StringInfo.GetTextElementEnumerator 方法,例子如下
var enumerator = StringInfo.GetTextElementEnumerator("??????????????????????????????????");
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.GetTextElement());
}
參閱:
- 2019-11-10-看看藏文里面一共有多少個(gè)字吧 - huangtengxiao
- 2019-11-10-使用StringInfo正確查找字符個(gè)數(shù) - huangtengxiao
?
本作品采用知識(shí)共享署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際許可協(xié)議進(jìn)行許可。歡迎轉(zhuǎn)載、使用、重新發(fā)布,但務(wù)必保留文章署名林德熙,不得用于商業(yè)目的,基于本文修改后的作品務(wù)必以相同的許可發(fā)布。如有任何疑問,請(qǐng)與我。
本文摘自 :https://blog.51cto.com/u