亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解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è)表格,表格的最后一列中的單元格,其字符串超長(zhǎng)后會(huì)被丟棄,而不是換行到下一行展示(HtmlToPdf渲染引擎導(dǎo)致的,沒(méi)辦法更改)

解決方案

根據(jù)字符串長(zhǎng)度手動(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碼,只考慮了英文語(yǔ)種使用者,后來(lái)隨著計(jì)算機(jī)的普及,有了其他編碼,比如GB2312、UTF8等,不止包含英文的字符編碼,但是這些編碼都對(duì)Ascii碼進(jìn)行了兼容

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

通過(guò)上面猜測(cè)的結(jié)論,可以先對(duì)每個(gè)字符判斷是不是Ascii字符來(lái)決定當(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;
}

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

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

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

相關(guān)文章

  • c#后臺(tái)線程訪問(wèn)前臺(tái)控件并顯示信息示例

    c#后臺(tái)線程訪問(wèn)前臺(tái)控件并顯示信息示例

    這篇文章主要介紹了c#后臺(tái)線程訪問(wèn)前臺(tái)控件并顯示信息示例,需要的朋友可以參考下
    2014-03-03
  • c# 給pdf添加數(shù)字簽名的步驟

    c# 給pdf添加數(shù)字簽名的步驟

    這篇文章主要介紹了c# 給pdf添加數(shù)字簽名的步驟,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#實(shí)現(xiàn)基于ffmpeg加虹軟的人臉識(shí)別的示例

    C#實(shí)現(xiàn)基于ffmpeg加虹軟的人臉識(shí)別的示例

    本篇文章主要介紹了C#實(shí)現(xiàn)基于ffmpeg加虹軟的人臉識(shí)別的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • C#自定義組件實(shí)現(xiàn)表格的多層表頭功能

    C#自定義組件實(shí)現(xiàn)表格的多層表頭功能

    這篇文章主要為大家詳細(xì)介紹了如何使用C#自定義組件實(shí)現(xiàn)表格的多層表頭功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • C#如何打開(kāi)選擇文件對(duì)話框和選擇目錄對(duì)話框

    C#如何打開(kāi)選擇文件對(duì)話框和選擇目錄對(duì)話框

    這篇文章主要介紹了C#如何打開(kāi)選擇文件對(duì)話框和選擇目錄對(duì)話框問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C# 位運(yùn)算符整理

    C# 位運(yùn)算符整理

    在C#中可以對(duì)整型運(yùn)算對(duì)象按位進(jìn)行邏輯運(yùn)算。按位進(jìn)行邏輯運(yùn)算的意義是:依次取被運(yùn)算對(duì)象的每個(gè)位,進(jìn)行邏輯運(yùn)算,每個(gè)位的邏輯運(yùn)算結(jié)果是結(jié)果值的每個(gè)位。
    2008-10-10
  • C#集合之列表的用法

    C#集合之列表的用法

    這篇文章介紹了C#集合之列表的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#中const用法詳解

    C#中const用法詳解

    這篇文章主要介紹了C#中const用法,實(shí)例分析了C#中const的用法及使用技巧,并對(duì)比分析了readonly關(guān)鍵字與const關(guān)鍵字的不同,需要的朋友可以參考下
    2014-11-11
  • C++17中的std::clamp如何限制值的范圍

    C++17中的std::clamp如何限制值的范圍

    std::clamp是C++17標(biāo)準(zhǔn)庫(kù)中的一個(gè)算法,用于將一個(gè)值限制在指定的范圍內(nèi),它可以用于游戲開(kāi)發(fā)、圖形處理和數(shù)值計(jì)算等領(lǐng)域,幫助我們更方便地實(shí)現(xiàn)值的限制,本文介紹C++17中的std::clamp如何限制值的范圍,感興趣的朋友一起看看吧
    2025-02-02
  • C#實(shí)現(xiàn)位圖轉(zhuǎn)換成圖標(biāo)的方法

    C#實(shí)現(xiàn)位圖轉(zhuǎn)換成圖標(biāo)的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)位圖轉(zhuǎn)換成圖標(biāo)的方法,可實(shí)現(xiàn)將bmp格式位圖轉(zhuǎn)換成ico格式圖標(biāo)的功能,需要的朋友可以參考下
    2015-06-06

最新評(píng)論