解决.net中截取字符串的汉字与数字还有静态扩展方法
转载 http://blog.163.com/cn_dreamgo/blog/static/52679452200961033212407/
str1 = "测试";
在C#中使用str1.length的到的长度是2,在C中strlen()得到的长度是4;这样在字符长处理中就遇到了问题。
在C编写的程序中传输一段中英文混合的固定长度20字节的字符串给C#编写的程序,不足的位数补空字符。当在C#中进行字符串截取时,由于存在汉字问题,导致截取位数出现错误,获取的信息也同样错误。
C传输字符串:"A这是一个测试代码段 B这是测试代码段2 C这是测试代码段3 "
C#中要截取得到每段字符串,使用str.Substring(0,20) 得到字符串是:"A这是一个测试代码段 B这是测试代码段2"而不是所需要"A这是一个测试代码段 "。
为此,我编写了下面的小函数来代替原来的Substring实现获取从指定位置开始指定长度的字符段。
==========================================================================
扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。
扩展方法的要求如下:
1 第一个参数是要扩展或者要操作的类型,这称为"被扩展的类型"
2 为了指定扩展方法,要在被扩展的类型名称前面附加this修饰符
3 要将方法作为一个扩展方法来访问,要用using指令导入扩展类型的命名空间,或者使扩展类型和调用代码在同一个命名空间中.
如果扩展方法的签名已经和被扩展类型中的一个签名匹配 扩展方法永远不会得到调用,除非是作为一个普通的静态方法
扩展方法无法帮助我们建立一个清楚的版本控制机制,因为一旦在被扩展的类型中添加一个匹配的签名,就会将现有的扩展方法覆盖,而且不会发出任何警告. 如果对被扩展的类的源代码没有控制权,这个问题还会变得更加突出 (猫的理解是很容易出现匹配冲突所导致的结果吧)
- //扩展方法必须在非泛型静态类中定义
- public static class qzwtest
- {
- //扩展方法
- public static string[] qzw(this string str)
- {
- return str.Split(new char[] { ' ', ',' });
- }
- }
- class Program
- {
- static int Main()
- {
- string testStr = "钱卓文 is 喵喵,贤静";
- //调用扩展方法
- string[] testArray = testStr.qzw();
- foreach (string s in testArray)
- {
- Console.WriteLine(s);
- }
- Console.ReadKey();
- return 0;
- }
- }
解决.net中截取字符串的汉字与数字还有静态扩展方法的更多相关文章
- SQL Server中截取字符串常用函数
SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...
- LoadRunner中截取字符串
LoadRunner中截取字符串 /*strchr和strrchr的区别*/ char *strTest1="citms citms"; char *strTest2,*strTe ...
- shell中截取字符串的方法总结
shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...
- SqlServer中截取字符串
SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...
- SQL Server 中截取字符串常用的函数
SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...
- sql server中截取字符串的常用函数
我们如果要在sql server中,使用截取字符串的方法要怎样使用呢? sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING() /****** Sql ...
- (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)
原文地址:解决fasterxml中string字符串转对象json格式错误问题 com.fasterxml.jackson.databind.ObjectMapper mapper = new com ...
- linux 中截取字符串
shell中截取字符串的方法有很多中,${expression}一共有9种使用方法.${parameter:-word}${parameter:=word}${parameter:?word}${pa ...
- C#中截取字符串的几种方法
1.根据单个分隔字符用split截取 例如 复制代码代码如下: string st="GT123_1"; string[] sArray=st.split("_&qu ...
随机推荐
- VS 2012 插件卸载(删除自己安装的插件)
给VS 装了一个插件,装完之后感觉别扭,所以想卸载,[工具]--> [扩展和更新]-->[找到想要卸载的插件点击一下就会出现禁用或卸载]
- VC 窗口出现白屏闪烁的解决办法
处理一下窗口的WM_ERASEBKGND消息即可. 在messagemap里添加ON_WM_ERASEBKGND() 在窗口头文件里添加 afx_msg BOOL OnEraseBkgnd(CDC* ...
- C++关键字之static
一.面向过程设计中的static 1.静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: [cpp] #include& ...
- hdu 5586 Sum(dp+技巧)
Problem Description There )mod10007.After that,the sum of n numbers should be as much as possible.Wh ...
- bootstrap-js(3)滚动监听
导航条实例 ScrollSpy插件根据滚动的位置自动更新导航条中相应的导航项. 拖动下面区域的滚动条,使其低于导航条的位置,注意观察active类的变化.下拉菜单中的子项也会跟着变为高亮状态. 1.调 ...
- SQL中去除某字段中的某个字符语法
update S_ENTERPRISE set DAY_PROCESS=replace(DAY_PROCESS,'吨','') where DAY_PROCESS like '%吨%'
- JVM学习之常用概念
方法区 当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例. ...
- [置顶] 蓝牙基础知识进阶——Physical channel
从本篇文章开始,晓东将会和大家一起来学习一些蓝牙的比较高阶的基础知识. 二.物理通道 物理通道是piconet区分的标准,它是蓝牙系统结构层次中的最底层了. Q1:物理通道有哪些类型 物理通道 ...
- jQuery中的类型判断
在JQuery中有一个type方法,在1.11.2中是这样写的 var class2type = {}; var toString = class2type.toString; jQuery.each ...
- Android 内存管理之优化建议
OOM(OutOfMemory)转:http://hukai.me/android-performance-oom/ 前面我们提到过使用getMemoryClass()的方法可以得到Dalvik He ...