最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C#如何判斷字符串的顯示寬度

 更新時(shí)間:2023年11月08日 10:33:36   作者:吳俊城  
這篇文章主要為大家詳細(xì)介紹了C#判斷字符串的顯示寬度的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下

起因

公司有一個(gè)使用項(xiàng)目使用HTML轉(zhuǎn)換為PDF,其中有一個(gè)表格,表格的最后一列中的單元格,其字符串超長后會(huì)被丟棄,而不是換行到下一行展示(HtmlToPdf渲染引擎導(dǎo)致的,沒辦法更改)

解決方案

根據(jù)字符串長度手動(dòng)添加<br/>換行

var source = "ABCD";
 
if (GetLength(source)>2)
{
    source = source.Insert(2,"<br/>");
}
 
Console.WriteLine(source);
// 輸出AB<br/>CD
 
int GetLength(string src)
{
    return src.Length;
}

出現(xiàn)了一個(gè)BUG

當(dāng)原始內(nèi)容中存在中文時(shí),中文字符的顯示寬度大于英文字符的寬度,按照字符串中的字符數(shù)進(jìn)行處理,并不準(zhǔn)確

/*
* 中文:中文<br/>CD
* 英文:AB<br/>CD
*/

原因分析

在文字的顯示中,有全角和半角的區(qū)別

全角:指一個(gè)字符占用兩個(gè)標(biāo)準(zhǔn)字符位置的狀態(tài)。

半角:指一個(gè)字符占用一個(gè)標(biāo)準(zhǔn)字符位置的狀態(tài)。

嘗試解決

字符編碼:最早的字符編碼為Ascii碼,只考慮了英文語種使用者,后來隨著計(jì)算機(jī)的普及,有了其他編碼,比如GB2312、UTF8等,不止包含英文的字符編碼,但是這些編碼都對(duì)Ascii碼進(jìn)行了兼容

沒有細(xì)心求證的結(jié)論:Ascii碼對(duì)應(yīng)的是半角,中文擴(kuò)展部分是全角展示,半角顯示寬度為全角的一半(這結(jié)論是我猜的,沒有求證,如果不對(duì)還請(qǐng)?zhí)岢雠u(píng)指正)

通過上面猜測的結(jié)論,可以先對(duì)每個(gè)字符判斷是不是Ascii字符來決定當(dāng)前是全角還是半角

var source = "ABCD";
var index =InserAtDisplayWidth(2,source);
if (index!=-1)
{
    source = source.Insert(index,"<br/>");
}
// AB<br/>CD
Console.WriteLine(source);
 
var source2 = "中文CD"; 
var index2 =InserAtDisplayWidth(2,source2);
if (index2!=-1)
{
    source2 = source2.Insert(index2,"<br/>");
}
// 中<br/>文CD
Console.WriteLine(source2);
 
 
 
int InserAtDisplayWidth(int inserAtDisplayWidth, string source){
    int now =0;
    for (int i = 0; i < source.Length; i++)
    {
        if( char.IsAscii(source[i])){
            // 半角占一個(gè)顯示寬度
            now +=1;
        }else{
            // 全角占兩個(gè)顯示寬度
            now +=2;
        };
 
        if (now>inserAtDisplayWidth)
        {
            return i;
        }
    }
    return -1;
}

通過對(duì)字符的判斷,更加準(zhǔn)確的匹配了分隔的位置,既避免了無效的空白區(qū)域,又避免了過長的字符串溢出導(dǎo)致看不到內(nèi)容

/*
* AB<br/>CD
* 中<br/>文CD
*/

到此這篇關(guān)于詳解C#如何判斷字符串的顯示寬度的文章就介紹到這了,更多相關(guān)C#判斷字符串顯示寬度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

新余市| 磐石市| 朔州市| 康保县| 阳朔县| 高青县| 苍梧县| 睢宁县| 许昌县| 手机| 沂水县| 乌拉特前旗| 浮梁县| 即墨市| 延津县| 兴国县| 黄山市| 凭祥市| 达孜县| 罗定市| 克拉玛依市| 东方市| 信丰县| 玉屏| 晋中市| 霍城县| 元江| 陵川县| 临潭县| 麟游县| 铜梁县| 黑龙江省| 承德市| 武汉市| 永康市| 华坪县| 宜都市| 天等县| 韩城市| 宁陵县| 昆山市|