中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

C# 中 String.Length 對數字 文字 字母 的(de)解決思路

      大家天天用String 對(dui)象的(de)Length屬性,有沒有發現他只是(shi)在(zai)機械(xie)的(de)統計一下String對(dui)象上面的(de)字(zi)(zi)符(fu)個(ge)數,而沒有區(qu)分(fen)文字(zi)(zi)或數字(zi)(zi)說占字(zi)(zi)符(fu)的(de)長度哪?

      微軟官方針對改屬性給的解釋是“當(dang)前(qian)字(zi)符串中字(zi)符的數(shu)量(liang) ” 

      其(qi)實在(zai)C#.Net 這樣的(de)(de)支持Unicode字(zi)符(fu)(fu)集的(de)(de)環境下(xia),字(zi)符(fu)(fu)串處理時,英文(wen)、數字(zi)、漢字(zi)以(yi)及標點(dian)符(fu)(fu)號(hao)都是(shi)當著一(yi)個(ge)字(zi)符(fu)(fu)來看待的(de)(de),但(dan)是(shi)英文(wen)、中文(wen)顯(xian)示時所占寬度(du)(du)不一(yi)致 ,比如(ru)中文(wen)一(yi)個(ge)漢字(zi)占用(yong)2個(ge)字(zi)節長度(du)(du),而英文(wen)占用(yong)1個(ge)字(zi)節長度(du)(du)。     

      比如(ru)有這(zhe)樣一個(ge)場景,當我(wo)們想根據(ju)一個(ge)字(zi)(zi)符串長(chang)度,截(jie)取部分文字(zi)(zi)顯(xian)(xian)示到界面(mian)上(shang) ,這(zhe)時字(zi)(zi)符串中數(shu)字(zi)(zi)和文字(zi)(zi)都(dou)存(cun)在的(de)話,這(zhe)個(ge)長(chang)度顯(xian)(xian)然是有錯(cuo)誤的(de),最終界面(mian)上(shang)顯(xian)(xian)示的(de)也將會(hui)相當不整(zheng)齊。

      下面我就給出(chu)C#.Net中中英文混排的字符(fu)串,如何獲取(qu)真(zhen)實長度

      我先給出目前網(wang)絡(luo)上大家(jia)普遍的做法,主要(yao)有兩種方(fang)式:

方(fang)式一: 

string tipInfo = "123測ss試*.。空 格";

int length = System.Text.UnicodeEncoding.Default.GetByteCount(tipInfo); 

 

  方式二:

        string tipInfo = "123測ss試*.。空 格(ge)";

        int length = Encoding.GetEncoding("GB2312").GetBytes(tipInfo.ToCharArray()).Length; 

 

  以上兩種方案(an)解決的(de)(de)方式是一(yi)樣(yang)(yang)(yang)的(de)(de),統(tong)一(yi)將數字(zi)(zi),字(zi)(zi)母,文(wen)字(zi)(zi),按兩個字(zi)(zi)節來處理,也(ye)就是Unicode的(de)(de)做法。但(dan)這(zhe)樣(yang)(yang)(yang)做,截(jie)取(qu)(qu)的(de)(de)時(shi)候長(chang)(chang)度(du)(du)還是不(bu)(bu)統(tong)一(yi),顯(xian)示到界面上還是不(bu)(bu)對齊(qi)。當然想(xiang)的(de)(de)快的(de)(de)朋友會說了(le),在結(jie)果的(de)(de)基礎上除以2不(bu)(bu)就是總個數了(le)嗎,這(zhe)樣(yang)(yang)(yang)截(jie)取(qu)(qu)的(de)(de)結(jie)果應該是相同的(de)(de)了(le)吧。這(zhe)樣(yang)(yang)(yang)想(xiang)是沒錯(cuo),可你自己運(yun)行下就會發現,截(jie)取(qu)(qu)出來的(de)(de)長(chang)(chang)度(du)(du)還是不(bu)(bu)統(tong)一(yi),有(you)的(de)(de)長(chang)(chang),有(you)的(de)(de)短。

 

以下是我解決(jue)該問題的方式,我把數(shu)字(zi),字(zi)母,文字(zi)分別(bie)統計,數(shu)字(zi)和字(zi)母兩個為一個,這樣顯示到界面上(shang),截取出(chu)來(lai)的長度是相同的。

 

        private static int GetSeparateSubString(string tString)
        {
            string tempStr = tString;
            int Count = 0;
            int temp = 0;
            for (int i = 0; i < tempStr.Length; i++)
            {
                string Char = tempStr.Substring(i, 1);
                int byteCount = Encoding.Default.GetByteCount(Char);

                if (byteCount == 1)
                {
                    temp++;
                    if (temp == 2)
                    {
                        Count++;
                        temp = 0;
                    }
                }
                else if (byteCount > 1)
                {
                    Count++;
                }
            }
            return Count;

        } 

 

 如果大(da)家還有(you)什么好的(de)想法,歡迎(ying)留言(yan)指正(zheng)。

 

以上三種方案執行后的結果: 

  

posted @ 2012-06-28 15:58  Popeye-lxw  閱讀(2061)  評論(0)    收藏  舉報