C#按照指定長度分割中英文字符串


最近有一個需求:玩家發的不同長度文字,需要自適應行數。

初步實現想法很簡單,直接獲取字符數均分行數,再利用string.substring()切割即可。但是顯而易見,由於一般字體下,中文顯示寬度一般是兩個數字|字母的寬度,所以直接分割的每一行元素個數一致,但是顯示長度卻長短不一。

解決辦法:利用遞歸實現此方法:

 

private void GetSubStringList(string str,int length,List<string> list)
{
     string content = "";
     string nextSub = "";
     byte[] content    = System.text.Encoding.Unicode.GetBytes(str);
     if (length>content.Length)
    {
        contentSub = str;
        if (contentSub != "")
        {
            list.Add(contentSub);
        }
    }
    else
    {
        int index = 0;
        for (int i = 0;i<length*2 &&i<str.Length*2;i++   )
        {
            if ( i%2 != 0 && content[i] == 0)
            {
                index++;
            }
        }
        index += (int)Math.floor((double)(length - index)/2f); //漢字數*2+字符數=length
        if ( index >str.Length)
        {
            index = str.Length;
        }
        contentSub = str.Substring(0,index);
        nextSub = str.Substring(index);
        list.Add(contentSub);
        
        GetSubStringList(nextSub,length,list);
    }
}

  參數:str:需要切割的字符串;

       length:每一行顯示的長度(字節數);

       list:保存每一行的內容,使用時遍歷取出即可。

 

  主要利用到 System.text.Encoding.Unicode.GetBytes()方法,將string字符串轉換成Unicode編碼的byte數組。Unicode編碼方式中:字符類型的第二字節為0;漢字第二字節大於0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM