How To - 中文字換行判斷問題

相信許多人(包括我)在寫程式的時候,常常會遇到一篇文章或是描述,根據欄寬設定而需要換行的需求,尤其在應用ListBox / Multicolumn ListBox / Tree的時候,如果一個欄位的內容過長,便會無法完整顯示。此時就需要有換行機制。

偏偏如果遇到描述中夾雜著中英文字元,則在換行的時候可能會拆到中文字字元而導致產生亂碼,如此便需要稍微計算一下才能進行換行。

簡單(隨便)寫了一個範例在這裡提供大家使用。

想要了解程式作法的可以往下看,稍微敘述一下這個程式:

輸入為String in,同時須定義換行長度Size,這邊特別注意,一個英文或是半形標點符號佔1個字元長度,一個中文或是全形標點符號佔2個字元長度。輸出則為concatenated string。

這個程式簡單說是逐一掃瞄字元,利用英文/半形符號的ASCII碼都小於128的特性,當掃到小於128的字元則判斷為英文/半形符號,取一個字元長度,反之則判斷為中文或是全形標點符號,取兩個字元長度,同時利用一個暫存器儲存現在讀了多少字元,超過設定的長度,則再該次擷取字元前加上換行符號,並且重新計數。等到全部掃描完畢之後再把所有掃描結果組合為字串。

很笨的方法,但是運作起來似乎還算正常。
如果各位有更好的方法或是抓到BUG的話,也煩請告訴我喔!