C#中文字?jǐn)?shù)相關(guān)

C#里面中文相關(guān)的測(cè)試

using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;

namespace Tests
{
    public class HanTest
    {

        public static void LogCharInfo(string str)
        {
            foreach (var ch in str)
            {
                var cate = char.GetUnicodeCategory(ch);
                Debug.Log($"[{ch}]--{cate}------");
                Debug.Log($"IsControl={char.IsControl(ch)}\tIsDigit={char.IsDigit(ch)}\tIsHighSurrogate={char.IsHighSurrogate(ch)}\tIsLetter={char.IsLetter(ch)}");
                Debug.Log($"IsLetterOrDigit={char.IsLetterOrDigit(ch)}\tIsLower={char.IsLower(ch)}\tIsLowSurrogate={char.IsLowSurrogate(ch)}\tIsNumber={char.IsNumber(ch)}");
                Debug.Log($"IsPunctuation={char.IsPunctuation(ch)}\tIsSeparator={char.IsSeparator(ch)}\tIsSurrogate={char.IsSurrogate(ch)}");
                Debug.Log($"IsSymbol={char.IsSymbol(ch)}\tIsUpper={char.IsUpper(ch)}\tIsWhiteSpace={char.IsWhiteSpace(ch)}");
                Debug.Log("==============");
            }
        }

        public static void LogSubstringByTextElements(string s)
        {
            Debug.Log("----------LogSubstringByTextElements------------");
            StringInfo strInfo = new StringInfo(s);
            for (int i = 0; i < strInfo.LengthInTextElements; i++)
            {
                Debug.Log($"第[{i}]個(gè)字(文本元素)是[{strInfo.SubstringByTextElements(i, 1)}]");
            }
        }

        public static void LogElements(string s)
        {
            Debug.Log("-----------------LogElements--------------------");
            TextElementEnumerator textElementEnumerator = StringInfo.GetTextElementEnumerator(s);
            while (textElementEnumerator.MoveNext())
            {
                Debug.Log($"文本元素[{textElementEnumerator.GetTextElement()}]的起始index是[{textElementEnumerator.ElementIndex}]");
            }
        }

        public static void LogElementsStartIndex(string s)
        {
            Debug.Log("-----------LogElementsStartIndex--------------------");
            int[] indexArray = StringInfo.ParseCombiningCharacters(s);
            for (int i = 0; i < indexArray.Length; i++)
            {
                Debug.Log($"第[{i}]個(gè)元素记餐,起始index是[{indexArray[i]}]");
            }
        }

        public static void DoTest(string s)
        {
            Debug.Log("-----DoTest----");
            Debug.Log(s);
            Debug.Log("=====================");
            LogCharInfo(s);
            LogSubstringByTextElements(s);
            LogElements(s);
            LogElementsStartIndex(s);
        }

        [Test]
        public void TestHan()
        {
            string msg = @" 哈嘍厨疙,大家好,這次的分享是關(guān)于《守望先鋒》(譯注:下文統(tǒng)一簡(jiǎn)稱為Overwatch)游戲架構(gòu)設(shè)計(jì)和網(wǎng)絡(luò)部分袁梗。老規(guī)矩,手機(jī)調(diào)成靜音憔古;離開時(shí)記得填寫調(diào)查問卷;換下半藏淋袖,趕緊推車:枋小(眾笑)
          我是Tim Ford,是暴雪公司Overwatch開發(fā)團(tuán)隊(duì)老大即碗。自從2013年夏季項(xiàng)目啟動(dòng)以來就在這個(gè)團(tuán)隊(duì)了焰情。在那之前,我在《Titan》項(xiàng)目組剥懒,不過這次分享跟Titan沒有半毛錢關(guān)系内舟。(眾笑)
          這次分享的一些技術(shù),是用來降低不停增長(zhǎng)的代碼庫的復(fù)雜度(譯注初橘,代碼復(fù)雜度的概念需要讀者自行查閱)验游。為了達(dá)到這個(gè)目的我們遵循了一套嚴(yán)謹(jǐn)?shù)募軜?gòu)。最后會(huì)通過討論網(wǎng)絡(luò)同步(netcode)這個(gè)本質(zhì)很復(fù)雜的問題保檐,來說明具體如何管理復(fù)雜性耕蝉。
 
          Overwatch是一個(gè)近未來世界觀的在線團(tuán)隊(duì)英雄射擊游戲,它的主要是特點(diǎn)是英雄的多樣性夜只, 每個(gè)英雄都有自己的獨(dú)門絕技垒在。";
            DoTest(msg);
        }

        [Test]
        public void TestUnicode()
        {
            string msg = "a666\u0304\u0308bc\u0327";
            DoTest(msg);
        }

        [Test]
        public void TestEn()
        {
            string msg = "hello world ! this is 666 !!!";
            DoTest(msg);
        }
    }
}

部分測(cè)試結(jié)果:

image.png

image.png
  1. 中文通常都是OtherLetter.
  2. 中文文本元素的長(zhǎng)度直接是String的長(zhǎng)度,也就是說一個(gè)Char就是一個(gè)漢字。
    下面是舉例其他某些語言會(huì)導(dǎo)致文字長(zhǎng)度不一致的情況:


    image.png

    image.png

那么怎么統(tǒng)計(jì)一段文字中的漢字?jǐn)?shù)量扔亥?
方法一场躯、判斷IsLetter為true且是OtherLetter;這個(gè)方法比較粗糙,但也可以在只有中文英文的情況下使用旅挤;
方法二踢关、取出每個(gè)IsLetter為true的Unicode值,并且找到漢字的Unicode范圍谦铃,在這個(gè)范圍內(nèi)才認(rèn)為是一個(gè)漢字耘成;這個(gè)方法相對(duì)精確一些。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驹闰,一起剝皮案震驚了整個(gè)濱河市瘪菌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘹朗,老刑警劉巖师妙,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屹培,居然都是意外死亡默穴,警方通過查閱死者的電腦和手機(jī)怔檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓄诽,“玉大人薛训,你說我怎么就攤上這事÷胤眨” “怎么了乙埃?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锯岖。 經(jīng)常有香客問我介袜,道長(zhǎng),這世上最難降的妖魔是什么出吹? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任遇伞,我火速辦了婚禮,結(jié)果婚禮上捶牢,老公的妹妹穿的比我還像新娘鸠珠。我一直安慰自己,他們只是感情好叫确,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布跳芳。 她就那樣靜靜地躺著,像睡著了一般竹勉。 火紅的嫁衣襯著肌膚如雪飞盆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天次乓,我揣著相機(jī)與錄音吓歇,去河邊找鬼。 笑死票腰,一個(gè)胖子當(dāng)著我的面吹牛城看,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杏慰,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼测柠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了缘滥?” 一聲冷哼從身側(cè)響起轰胁,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朝扼,沒想到半個(gè)月后赃阀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擎颖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年榛斯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了观游。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驮俗,死狀恐怖懂缕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情王凑,我是刑警寧澤提佣,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站荤崇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏潮针。R本人自食惡果不足惜术荤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望每篷。 院中可真熱鬧瓣戚,春花似錦、人聲如沸焦读。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矗晃。三九已至仑嗅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間张症,已是汗流浹背仓技。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俗他,地道東北人脖捻。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兆衅,于是被迫代替她去往敵國(guó)和親地沮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • DAY 01 JAVA簡(jiǎn)述 Java是由SUN公司在1995年推出的一門高級(jí)編程語言羡亩,是現(xiàn)今服務(wù)器端的首選編程語言...
    周書達(dá)閱讀 899評(píng)論 0 0
  • 基礎(chǔ) .NET概述 參考:http://www.cnblogs.com/yplong/p/3279934.html...
    donite閱讀 1,612評(píng)論 0 8
  • UTF-8 編碼提供了一種簡(jiǎn)便而向后兼容的方法, 使得那種完全圍繞 ASCII 設(shè)計(jì)的操作系統(tǒng), 比如 Unix,...
    謝大見閱讀 4,674評(píng)論 0 3
  • A.首先了解下1和2在Linux中代表什么 在Linux系統(tǒng)中0 1 2是一個(gè)文件描述符 名稱代碼操作符Linux...
    Gaafung峰閱讀 2,648評(píng)論 0 4
  • 周末回家摩疑,老爸愁眉苦臉地對(duì)我說:“王敏,昨天我去體檢夕春,醫(yī)生說我的膽囊沒有了未荒。”我說:“又沒動(dòng)手術(shù)及志,咋...
    WM王敏閱讀 381評(píng)論 1 6