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;// 把字符平等对待时的字符串长度

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;

}

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;

}

调用:

private void button1_Click(object sender,EventArgs e)

{

string s="一二3456七八";

s=CutByteString(s,5);

MessageBox.Show(s);    //输出 “一二3”

s=CutByteString(s,3,5);

MessageBox.Show(s);     //输出 “二345”

}

时间: 2024-08-28 10:14:58

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

C# 字符串按字节截取

/// <summary> /// 截取指定字节长度的字符串 /// </summary> /// <param name="str">原字符串</param> /// <param name="startIndex">起始位置</param> /// <param name="len">截取字节长度</param> /// <returns&g

截取字符串实例

#include <stdio.h> //通过指针函数返回一个截完的串的地址 char *substring(char s[],int i,int j) { //这个临时数组必须是static,否则值传不回去 static char temp[100]; int n,m; for(m=0,n=i;n<=j;n++,m++) { temp[m]=s[n]; } temp[m]='\0'; return temp; } int main() { char str[] = "I Lo

【转】C#中如何实现左截取和右截取字符串

使用C#语法编写程序时,我们需要截取一个字符串左边或右边的若干个字符,该如何操作呢?在VB中可以使用left或right函数实现,C#中没有提供这样的函数呢?答案是没有.但是,C#中提供Substring方法可以实现相关功能. 首先我们回顾一下Substring方法. 用法一: String.Substring 方法 (startIndex, length) 返回此String中从 startIndex 开始的长度为 length 的子字符串. startIndex:子字符串的起始位置的索引,从

C#实现左截取和右截取字符串实例

本文实例讲述了C#实现左截取和右截取字符串的方法,分享给大家供大家参考.具体方法分析如下: 问题如下: 使用C#语法编写程序时,我们需要截取一个字符串左边或右边的若干个字符,该如何操作呢? 在VB中可以使用left或right函数实现,C#中没有提供这样的函数呢?答案是没有.但是,C#中提供Substring方法可以实现相关功能. 首先我们回顾一下Substring方法. 用法一: String.Substring 方法 (startIndex, length) 返回此String中从 star

mysql根据字符截取字符串(总结)

mysql根据字符截取字符串(总结) 1.1 前言   为结合自己平常查资料的习惯,我会先给出例子,然后再对相关知识进行详解.该案例使用到的函数为:SUBSTRING_INDEX 1.2 需要实现的实际需求 如下表为文档目录表,其中关键字段dir_seq为目录层级索引,dir_name为目录名称.假设现在我们获取到dir_seq值为 .341.346.347.348. ,现在我们想获取到各级别的目录主键. 1.3 截取一级目录主键 步骤一:     先根据字符'.'从左边开始第二个'.'开始截取

js查找字符串、js截取

js查找元素.js查找字符串 let index=data.indexOf(","); js截取.js截取字符串 $("#bankurl_id").val(data.substring(0,index)); $("#bankname").val(data.substring(index+1)); 原文地址:https://www.cnblogs.com/qq376324789/p/10571373.html

Linux Shell 截取字符串

Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var:start} ${var:0-start:len} ${var:0-start} 下面用几个例子展示一下: 1) 获得字符串的长度 语法: ${#var} 示例代码: str="http://www.fengbohello.xin3e.com/blog/shell-truncating-string

JavaScript字符串對象substr方法入門實例(用於截取字符串)

JavaScript substr 方法 substr 方法用於根據開始位置和長度截取字符串並返回截取部分字符串.其語法如下:復制代碼 代碼如下:str_object.substr(start, length) 參數說明: 參數 說明 str_object 要操作的字符串(對象) start 必需.開始截取的位置,從 0 開始計算:如果為負數則從字符串末尾開始計算(經測試,某些浏覽器版本下無效) length 可選.指要截取的字符串長度,省略則至到字符串結束 提示:substr 方法不符合 EC

Java按照字节来截取字符串的工具,不会出现半个汉字

原文:Java按照字节来截取字符串的工具,不会出现半个汉字 源代码下载地址:http://www.zuidaima.com/share/1550463396842496.htm Java 按照字节来截取字符串的工具,不会出现半个汉字.一个中文两个字节,一个英文字符只占 1 个字节 1. 通常我们用于前端显示的时候,防止标题过长.... /* * Copyright 2012-2013 The Haohui Network Corporation */ package com.haohui.com