最近有個格式化字串的需求,是要計算已知字串的 Byte 數量,每 100 個 Byte 加上一個換行符號(不能超過100)。一開始的想法是一個 char 一個 char 去跑迴圈並計算 Byte 數。不過這樣又似乎不太妥當,想來想去,最後寫成這個樣子:

public static string SetupType(string text) {
//先去除換行字元
text = text.Replace("\r", "").Replace("\n", "");

//每行最大 Byte 數
int bytesCountEachLine = 100;

//記錄目前已處理完成的字元數
int charIndex = 0;

//最後的回傳值
string result = string.Empty;

Encoding ansi
= Encoding.Default;
byte[] textBytes = ansi.GetBytes(text);

while (charIndex < text.Length) {
//起始位置
int start = ansi.GetByteCount(text.Substring(0, charIndex)) ;

//利用 Encoding.GetCharCount 從起始位置將 100 個 Bytes 的字元一次取出
int count = 0;

if (textBytes.Length - start > bytesCountEachLine)
count
= ansi.GetCharCount(textBytes, start, bytesCountEachLine);
else
count
= ansi.GetCharCount(textBytes, start, textBytes.Length - start);

string target = text.Substring(charIndex, count);

//取出來的字串可能會大於 100 Bytes,所以需要把多餘的去掉
while (ansi.GetByteCount(target) > bytesCountEachLine) {
target
= target.Substring(0, target.Length - 1);
count
-= 1;
}

charIndex
+= count;


//最後一行不用加斷行符號
if (charIndex < text.Length)
result
+= target + "\r\n";
else
result
+= target;
}

return result;
}
 
 
用一段以前很愛看的小說片段來測試,結果如下:
測試前:
image 
 
 
測試後:
image 
arrow
arrow
    全站熱搜
    創作者介紹

    AnferneeHardaway 發表在 痞客邦 留言(0) 人氣()