zoukankan      html  css  js  c++  java
  • c# 字符串操作的小技巧

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

    public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>

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

                List<char> chars = s.ToList();

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

                int cn = s.Count(itm => itm.Equals('{'));

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

    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.

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

                string st = "Hello,world";
                st = "Hello,world2";

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

      private List<String> StringCleanUp(List<string> input)
            {
                Regex reg = new Regex(@"\<(\w+)\>(\w+?)\</\1\>", RegexOptions.Singleline);
    
                var matchItem = (
                        from c in input
                        where reg.IsMatch(c)
                        select reg.Replace(c, matchEvaluator)
                    ).Union(
                        from c in input
                        where !reg.IsMatch(c)
                        select c
                    );
    
                return matchItem.ToList<string>();
            }
    
            private string matchEvaluator(Match m)
            {
                return m.Groups[2].Value;
            }

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

    如果问题敬请指出。

  • 相关阅读:
    [转]Spring——jar包详解
    [转]Null value was assigned to a property of primitive type setter of"原因及解决方法
    [转]Spring3 MVC + jQuery easyUI 做的ajax版本用户管理
    [转]SpringMVC+Hibernate+Spring 简单的一个整合实例
    Spring MVC配置
    [转] 使用Spring MVC构建REST风格WEB应用
    NYOJ 467 中缀式变后缀式
    HBase源代码分析之HRegionServer上MemStore的flush处理流程(二)
    树中两个节点的最低公共祖先
    计算机图形学(一) 视频显示设备_1_CRT原理
  • 原文地址:https://www.cnblogs.com/fgynew/p/1936756.html
Copyright © 2011-2022 走看看