解决.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 ...
随机推荐
- ApiDemos示例学习(1)——ApiDemos示例的导入
---恢复内容开始--- 今天准备开始写这个ApiDemos示例的学习日记了,放在网上以监督自己! 首先是导入该示例.如果我们在配置Android开发环境是,利用Android SDK 安装包中的SD ...
- GetLastError来获得错误信息转成文本描述
我们一般在调用了一些API后都会用GetLastError来获得错误信息,但是信息都是Integer的,我们知道是什么意思么?嘿嘿,是的,有msdn呀,当然还可以用FormatMessage函数来.正 ...
- windows、linux创建子进程
在windows下创建子进程较常用到的API就是CreateProcess,可以通过以下的方式启动一个新进程: STARTUPINFO si = {0}; PROCES ...
- 最全面 Nginx 入门教程 + 常用配置解析
转自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介绍和安装 一个简单的配置文件 模块介绍 常用场景配置 进阶内容 参考资料 ...
- 自己写一个strcmp函数(C++)
题目说明: 写一个函数,实现两个字符串的比较.即自己写一个strcmp函数,函数原型为int strcmp( char * p1, char * p2); 设p1指向字符串s1,p2指向字符串s2.要 ...
- 04737_C++程序设计_第2章_从结构到类的演变
例2.1 使用成员函数的实例. #define _SCL_SECURE_NO_WARNINGS #include <iostream> using namespace std; struc ...
- iOS中UITextView键盘回收
iOS开发中,发现UITextView没有像UITextField中textFieldShouldReturn:这样的方法,那么要实现UITextView关闭键盘,就必须使用其他的方法,下面是可以使用 ...
- 可解压带中文名称文件的zip包
package com.text.ziptest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; i ...
- 用iframe框架,登录过期后登录框在框架里加载的问题
就是登录界面出现在iframe的框架里,而不是整个页面都跳转,找到了一个JS的解决方法,只要把下面的代码放在登录界面的<head></head>里就行了. <script ...
- <原>ASP.NET 学习笔记之HTML helper中参数何时会是路由参数,何时又会是query string?
HTML helper中参数何时会是路由参数,何时又会是query string? @Html.ActionLink("Edit", "Edit", new ...