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的信息替换原信息。如果不匹配,使用原字符串。

    如果问题敬请指出。

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/fgynew/p/1936756.html
Copyright © 2011-2022 走看看