截取固定长度文本,主要用于销售类软件打印小票使用。
网上的例子都是硬截取,经测试都无法使用,要么崩溃,要么多一个字符或少一个字符。
所以自己写了一个算法,此算法在汉字为2字节,英文和数字为1字节的编码上有效,这里使用的是默认编码,
如果截取出错请自行转换编码。
此贴主要用于备忘,和方便有需要的网友百度搜索时能找到。
public string 截取文本(string 待截取文本, int 截取长度)
{
//如果待截取文本长度不足用空格补齐...
int 文本长度 = 待截取文本.Length;//取要截取的文本
if (文本长度 < 截取长度) //如果待截文本的长度小于要截取字节数则用空格补上。
{
for (int i = 0; i < 截取长度 - 文本长度; i++)
{
待截取文本 += " ";//用空格补齐文本
}
}
//统计实际要截取长度...
int 计次 = 0;
int 汉字数量 = 0;
int 字母数量 = 0;
bool 是否汉字 = false;
string 取出单字;
int 字节数;
while (计次 < 截取长度)
{
取出单字 = 待截取文本.Substring(计次, 1);
计次++;
字节数 = Encoding.Default.GetByteCount(取出单字);
if (字节数 != 1)
{
截取长度 --;
汉字数量 ++;
是否汉字 = true;
}
else
{
字母数量 ++;
是否汉字 = false;
}
}
//判断截取并返回...
if (是否汉字 == true)
{
if ((字母数量 & 1) ==0)
{//偶数:
return 待截取文本.Substring(0, 汉字数量 + 字母数量);
}
else
{//奇数:
return 待截取文本.Substring(0, 汉字数量 + 字母数量 - 1) + " ";
}
}
else
{
return 待截取文本.Substring(0, 汉字数量 + 字母数量);
}
}
网上的例子都是硬截取,经测试都无法使用,要么崩溃,要么多一个字符或少一个字符。
所以自己写了一个算法,此算法在汉字为2字节,英文和数字为1字节的编码上有效,这里使用的是默认编码,
如果截取出错请自行转换编码。
此贴主要用于备忘,和方便有需要的网友百度搜索时能找到。
public string 截取文本(string 待截取文本, int 截取长度)
{
//如果待截取文本长度不足用空格补齐...
int 文本长度 = 待截取文本.Length;//取要截取的文本
if (文本长度 < 截取长度) //如果待截文本的长度小于要截取字节数则用空格补上。
{
for (int i = 0; i < 截取长度 - 文本长度; i++)
{
待截取文本 += " ";//用空格补齐文本
}
}
//统计实际要截取长度...
int 计次 = 0;
int 汉字数量 = 0;
int 字母数量 = 0;
bool 是否汉字 = false;
string 取出单字;
int 字节数;
while (计次 < 截取长度)
{
取出单字 = 待截取文本.Substring(计次, 1);
计次++;
字节数 = Encoding.Default.GetByteCount(取出单字);
if (字节数 != 1)
{
截取长度 --;
汉字数量 ++;
是否汉字 = true;
}
else
{
字母数量 ++;
是否汉字 = false;
}
}
//判断截取并返回...
if (是否汉字 == true)
{
if ((字母数量 & 1) ==0)
{//偶数:
return 待截取文本.Substring(0, 汉字数量 + 字母数量);
}
else
{//奇数:
return 待截取文本.Substring(0, 汉字数量 + 字母数量 - 1) + " ";
}
}
else
{
return 待截取文本.Substring(0, 汉字数量 + 字母数量);
}
}