在當前一個項目中,需要計算字串的長度,並將固定長度字元截下來,其中漢字要按2個字元計算,數字與字母按1個字元計算,沒有找到現成的函數可以使用,參考 如何得到一個漢字和字母組合的字串的準確的長度(asp.net 版本的) http://www.webjx.com/htmldata/2005-10-20/1129777793.html
參考寫了以下兩個函數,主要功能為按指定長度取copy字串,取代substring的功能吧。
private int GetLength(String aOrgStr)
{
int intLen=aOrgStr.Length;
int i;
char[] chars = aOrgStr.ToCharArray() ;
for(i=0;i<chars.Length;i++)
{
if(System.Convert.ToInt32( chars[i] )>255)
{
intLen++;
}
}
return intLen;
}
private String MutiSubString(String aOrgStr , int aLength, ref String aAfterStr)
{
int intLen = aOrgStr.Length ;
int start = 0 ;
int end = intLen ;
int single = 0;
char[] chars = aOrgStr.ToCharArray();
for (int i=0; i<chars.Length ;i++)
{
if (System.Convert.ToInt32(chars[i])>255)
{
start += 2;
}
else
{
start += 1;
single ++ ;
}
if (start >= aLength)
{
if ( end % 2 == 0)
{
if ( single % 2 == 0 )
{
end = i+1 ;
}
else
{
end = i ;
}
}
else
{
end = i+1 ;
}
break ;
}
}
string temp = aOrgStr.Substring(0, end);
string temp2 = aOrgStr.Remove(0,end);
aAfterStr = temp2 ;
return temp ;
}
運行結果 :
str = MutiSubString("abc漢字字元", 5 , aAfterStr)
str = "abc漢"
aAfterStr ="字字元"
已了卻一直以來使用 str.Length 把漢字當一個字元來用的毛病