控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

c# 字符串操作的小技巧

作者:佚名 出处:互联网 2011年01月17日 阅读:

c# 字符串操作的小技巧

字符串是由类定义的,如下

view sourceprint?1 public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>

注意它从接口IEnumerable<char>派生,那么如果想得到所有单个字符,那就简单了,

view sourceprint?1 List<char> chars = s.ToList();

如果要对字符串进行统计,那也很简单:

view sourceprint?1 int cn = s.Count(itm => itm.Equals('{'));

如果要对字符串反转,如下:

view sourceprint?1 new string(s.Reverse().ToArray());

如果对字符串遍历,那么使用扩展方法ForEach就可以了。

现在有一个需求 ,对一个list的字符串,我想对满足某些条件的进行替换,不满足条件的保留下来。问题来了,在forach的时候不能对字符串本身修改。因为msdn有如下的描述:

A String object is called immutable (read-only) because its value cannot be modified once it has been created. Methods that appear to modify a String object actually return a new String object that contains the modification.

所以如下代码其实是构造了两个字符串:

view sourceprint?1 string st = "Hello,world"; 

2 st = "Hello,world2";

回到那个问题,我想一个很简单的方法是先构造一个List<string>,然后对原字符串遍历 ,满足条件的修改后加入新的list,不满足的直接加入。这种方法很简单原始,效率也是最高的。Linq里面有UNION这个关键字,sql里面也有UNION这个集合操作,那么把它拿来解决这个问题如下:

view sourceprint?01 private List<String> StringCleanUp(List<string> input) 

02       { 

03           Regex reg = new Regex(@"\<(\w+)\>(\w+?)\</\1\>", RegexOptions.Singleline); 

04  

05           var matchItem = ( 

06                   from c in input 

07                   where reg.IsMatch(c) 

08                   select reg.Replace(c, matchEvaluator) 

09               ).Union( 

10                   from c in input 

11                   where !reg.IsMatch(c) 

12                   select c 

13               ); 

14  

15           return matchItem.ToList<string>(); 

16       } 

17  

18       private string matchEvaluator(Match m) 

19       { 

20           return m.Groups[2].Value; 

21       }

以上是用正则表达式进行匹配,如果匹配,用匹配的组2的信息替换原信息。如果不匹配,使用原字符串。

如果问题敬请指出。

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统