C# 字符串按字节截取

/// <summary>

/// 截取指定字节长度的字符串

/// </summary>

/// <param name="str">原字符串</param>

/// <param name="startIndex">起始位置</param>

/// <param name="len">截取字节长度</param>

/// <returns></returns>

public static string CutByteString(string str, int startIndex, int len)

{

string result = string.Empty;// 最终返回的结果

if (string.IsNullOrEmpty(str)) { return result; }

int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度

int charLen = str.Length;// 把字符平等对待时的字符串长度

if (startIndex == 0)

{

return CutByteString(str, len);

}

else if (startIndex >= byteLen)

{ return result; }

else //startIndex < byteLen

{

int AllLen = startIndex + len;

int byteCountStart = 0;// 记录读取进度

int byteCountEnd = 0;// 记录读取进度

int startpos = 0;// 记录截取位置

int endpos = 0;// 记录截取位置

for (int i = 0; i < charLen; i++)

{

if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2

{ byteCountStart += 2; }

else// 按英文字符计算加1

{ byteCountStart += 1; }

if (byteCountStart > startIndex)// 超出时只记下上一个有效位置

{

startpos = i;

AllLen = startIndex + len - 1;

break;

}

else if (byteCountStart == startIndex)// 记下当前位置

{

startpos = i + 1;

break;

}

}

if (startIndex + len <= byteLen)//截取字符在总长以内

{

for (int i = 0; i < charLen; i++)

{

if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2

{ byteCountEnd += 2; }

else// 按英文字符计算加1

{ byteCountEnd += 1; }

if (byteCountEnd > AllLen)// 超出时只记下上一个有效位置

{

endpos = i;

break;

}

else if (byteCountEnd == AllLen)// 记下当前位置

{

endpos = i + 1;

break;

}

}

endpos = endpos - startpos;

}

else if (startIndex + len > byteLen)//截取字符超出总长

{

endpos = charLen - startpos;

}

if (endpos >= 0)

{ result = str.Substring(startpos, endpos); }

}

return result;

}

/// <summary>

/// 截取指定字节长度的字符串

/// </summary>

/// <param name="str">原字符串</param>

/// <param name="len">截取字节长度</param>

/// <returns></returns>

public static string CutByteString(string str, int len)

{

string result = string.Empty;// 最终返回的结果

if (string.IsNullOrEmpty(str)) { return result; }

int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度

int charLen = str.Length;// 把字符平等对待时的字符串长度

int byteCount = 0;// 记录读取进度

int pos = 0;// 记录截取位置

if (byteLen > len)

{

for (int i = 0; i < charLen; i++)

{

if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2

{ byteCount += 2; }

else// 按英文字符计算加1

{ byteCount += 1; }

if (byteCount > len)// 超出时只记下上一个有效位置

{

pos = i;

break;

}

else if (byteCount == len)// 记下当前位置

{

pos = i + 1;

break;

}

}

if (pos >= 0)

{ result = str.Substring(0, pos); }

}

else

{ result = str; }

return result;

}

C# 字符串按字节截取,布布扣,bubuko.com

时间: 2024-11-03 20:53:55

C# 字符串按字节截取的相关文章

C#截取字符串按字节截取SubString

public static string CutByteString(string str,int len) { string result=string.Empty;// 最终返回的结果 if(string.IsNullOrEmpty(str)) { return result; } int byteLen=System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度 int charLen=str.Length;// 把字符平等对待时的字

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------

java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃.如果去四个字节就是“ab你”,取五个字节还是“ab你”.*/ 代码:其实是一个解码和编码的问题,要明白UTF-8码表和GBK码表的区别,UTF-8中用三个字节代表一个汉字,GBK使用2个字节代表一个汉字. 且在码表中都是用数字存放这些汉字.

按字节截取字符串

按字节截取字符串,参数:字符串,截取的字符          function getStr(str, n) {                 if (lenFor(str) <= n) {                     return str;                 }                 var tmpStr = str.substr(0, n);                 var tmpCode = tmpStr.replace(/[^\x00-\xf

Java中根据字节截取字符串

一.简介 为了统一世界各国的字符集,流行开了Unicode字符集,java也支持Unicode编码,即java中char存的是代码点值,即无论是'A'还是'中'都占两个字节. 代码点值:与Unicode编码表中字符相对应的代码值: 代码单元:就是java中的一个char,可一个以认为是字符编码的基本单元 二.根据字节截取字符串的代码实现 public String getSubString(String str, int length) throws Exception { int i; int

打印机打印字符串转字节数组截取半个中文导致的乱码问题

打印机打印的时候  要求:打印一行文字,但这行文字实际长度 len(单位是:px)是固定的 这时候我们的思路是  :GBK编码下汉字占用两个字节,而且这两个字节都是负数,char型字符占用一个字节, 每个汉字占用的宽度是24px   每个char型占用的宽度是12px    换言之每个字节占用的打印宽度是12px 本行所容纳的字节个数 num=len / 12: 这时候我们将字符串转为字节数组  截取num个字节放到字节数组,然后转为字符串就是该行打印的字符串 但是有个问题就是 当我们截取的最后

c# 判断字符是否是全角, 获取字符串的字节数 , 获取字符串指定长度字节数的字符串

1 Encoding.Default.GetByteCount(checkString);  =2 全角 =1 半角 /// <summary> /// 获取字符串的字节长度 /// </summary> /// <param name="str"></param> /// <returns></returns> public static int GetStringByteLength(this string s

按字节截取中英文

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 while (true) 6 { 7 Console.WriteLine("请输入字符串:"); 8 string s = getInput(0); 9 Console.WriteLine("请输入截取的字节长度(整数):"); 10 int l = Convert.ToInt32(getInput(1)); 11 s = GetSubString

华为测试 字符串运用-密码截取

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 .因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗? 输