日期:2014-05-18  浏览次数:20856 次

困扰2个周的问题,写TXT文件排版问题,有字符和数字,汉字,时间排版乱掉,怎样判断取得 字符串中有没有字符或者数字
由于汉字占两个字节
字符和数字占一个字节
我如果按长度截取字符串就出现了下面的效果,谢谢

------------------------------
期货交易所、大连商品交易所和郑州商品交易所累计交易金额首次突
破22万亿,达到了22.21万亿元。八个月的数字即刷新了20
万亿元,创该交易所成立以来历史新高;大商所成交5万亿元;郑商
......
------------------------------

就象上面文字的第二行一样,中间有数字时,就出现了问题
请问:   怎样才能知道我取得   这个字符串有没有字符或者数字,

这个问题已经困扰几个周了,分不够可以再加,谢谢

------解决方案--------------------
byte[] b = System.Text.Encoding.GetEncoding( "GB2312 ").GetBytes(str);
------解决方案--------------------
给你个ASP的参考,应该有帮助的
'功能:以汉字的长度为标准,返回字符的个数
'注:汉字长度为1等于两个ascii码在0-255的字符
'兴例:  "123在在在4256 " 假如现在想取前
function subStr(strOld,n)
if trim(strOld)= " " then
subStr= " "
elseif isnumeric(n)=false then
subStr=strOld
elseif n <=0 then
subStr=strOld
else
dim strOld_i,strOld_y,strOld_length
strOld_y=0 '
strOld_length=len(strOld)
for strOld_i=1 to strOld_length
if asc(mid(strOld,strOld_i,1)) <0 or asc(mid(strOld,strOld_i,1))> 255 then '这种情况说明是汉字或双角字符
strOld_y=strOld_y+2
else
strOld_y=strOld_y+1
end if
if strOld_y> =n then exit for
next

if strOld_y > n then
subStr=left(strOld,strOld_i-1)
elseif strOld_y=n then
subStr=left(strOld,strOld_i)
else
subStr=strOld
end if

end if
end function
------解决方案--------------------
你要按什么来截断,写了一个方法,是按字节长度截断的,试下

private string FormatString(string src, int len)
{
if (string.IsNullOrEmpty(src) || len < 2)
return null;

int count = 0;
StringBuilder sb = new StringBuilder();
StringBuilder fomatStr = new StringBuilder();
string result = string.Empty;
int byteLen = -1;

for (int i = 0; i < src.Length;i++)
{
char c = src[i];
byteLen = System.Text.Encoding.Default.GetByteCount(new char[] { c });

if (c != '\n ')
{
if (count < len - 2)
{
count += byteLen;
sb.Append(c);
}
else if (count == len - 2)
{
if (byteLen == 1)
{
count += byteLen;
sb.Append(c);
}
else if (byteLen == 2)
{
count = 0;
sb.Append(c);
fomatStr.Append(sb.ToString());
fomatStr.Append( "\n ");
sb = new StringBuilder();
}
}
else if (count == len - 1)
{
if (byteLen == 1)
{
count = 0;
sb.Append(c);
fomatStr.Append(sb.ToString());
fomatStr.Append( "\n ");
sb = new StringBuilder();
}
else if (byteLen == 2)
{
count = 2;
fomatStr.Append(sb.ToString());
fomatStr.Append( "\n ");
sb = new StringBuilder();
sb.Append(c);