【转载】C# 字符串截取指定长度的中文字符--精点

通常,一个中文会占两个字节的空间。很多语言里,一个中文字符就算是2个字符长度。

但在C#中,string里包含的中文字符只占一个字符长度。这就导致很多时候,使用string.SubString(int startIndex,int length)方法来截取字符会错位。

最近由于工作原因,会截取指定长度的字符来使用。但是在文档里,1个中文是2个长度来计算。刚开始还只是以为文档错误,后来才知道是由于C#的差异造成的。

刚开始,是直接到网上找算法,但是找到的算法,基本思路都是挨个字符判断(根据ASCII值)。不是算法复杂,就是容易出错,且不能涵盖所有的中文。

稍微研究了下,还是利用.Net框架自带的方法最简单。


基本思路如下,将string转化为byte[] ,将byte[]截取后,再转化为string ,这种方法,两步完成,且可谓万无一失。

public static string SubString(string toSub,int startIndex,int length)

{

    byte[] subbyte=System.Text.Encoding.Default.GetBytes(toSub);

    string Sub=System.Text.Encoding.Default.GetString(subbyte,startIndex,length);

    return Sub;

}

 



稍微解释下参数,toSub -需要截取的字符串,startIndex -开始截取的位置索引, length -截取的长度


用法基本和string.SubString(int startIndex,int length)一样。

转载于:https://www.cnblogs.com/zhanghai/p/5055211.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值