none
拆分一个稍微有点复杂的字符串,用c#实现 RRS feed

  • 问题

  • 字符串为:3,0|5,0|6,0|7,0|8,0|9,0|

    需要将其拆分,首先以|拆分开,然后:3,0表示键值,他们是一组的,可以分别提取到。如何快速实现,泛型,数组,请给一个示例,谢谢。

    2013年11月25日 13:03

答案

  • 你好
    建议你使用正则表达式来匹配,代码如下:

    string s = "3,0|5,0|6,0|7,0|8,0|9,0|";
                Regex reg=new Regex(@"\d,\d");
                MatchCollection mc = reg.Matches(s);
                foreach (Match m in mc)
                {
                    if (m.Success)
                    {
                        Console.WriteLine(m.Groups[0].Value);
                    }
                }

    如果就是这么一个很短的数组的话其实不管用数组还是正则表达式都无所谓,看不出来效率的高低,除非字符串特别长。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月26日 8:11
    版主
  • 用Split方法先分离,然后借助3.5的扩展方法进一步根据逗号进行键值对分离,代码如下:

    string s = "3,0|5,0|6,0|7,0|8,0|9,0|";
                string[] values = s.Split(new char[]{'|'},StringSplitOptions.RemoveEmptyEntries);
     
                var result = (from item in values
                             let sv = item.Split(',')
                             select new
                             {
                                 Key = sv[0],
                                 Value = sv[1]
                             });

    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report

    2013年11月27日 4:19
    版主
  • 很好,感谢二位,不过二位回答问题速度慢了些,我已经先做出来了,

    以下是我的解法方法

    string ss="3,0|5,0|6,0|7,0|8,0|9,0|";
    string[] strin = ss.Split(char.Parse("|"));
    string[][] InStr=new string[strin.Length][];
    for (int i = 0; i < strin.Length; i++)
    {
    InStr[i] = strin[i].Split(char.Parse(","));

    }

    不过让我又多了2种解决办法,由衷感谢。

    2013年11月27日 6:17

全部回复

  • 你好
    建议你使用正则表达式来匹配,代码如下:

    string s = "3,0|5,0|6,0|7,0|8,0|9,0|";
                Regex reg=new Regex(@"\d,\d");
                MatchCollection mc = reg.Matches(s);
                foreach (Match m in mc)
                {
                    if (m.Success)
                    {
                        Console.WriteLine(m.Groups[0].Value);
                    }
                }

    如果就是这么一个很短的数组的话其实不管用数组还是正则表达式都无所谓,看不出来效率的高低,除非字符串特别长。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月26日 8:11
    版主
  • 用Split方法先分离,然后借助3.5的扩展方法进一步根据逗号进行键值对分离,代码如下:

    string s = "3,0|5,0|6,0|7,0|8,0|9,0|";
                string[] values = s.Split(new char[]{'|'},StringSplitOptions.RemoveEmptyEntries);
     
                var result = (from item in values
                             let sv = item.Split(',')
                             select new
                             {
                                 Key = sv[0],
                                 Value = sv[1]
                             });

    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report

    2013年11月27日 4:19
    版主
  • 很好,感谢二位,不过二位回答问题速度慢了些,我已经先做出来了,

    以下是我的解法方法

    string ss="3,0|5,0|6,0|7,0|8,0|9,0|";
    string[] strin = ss.Split(char.Parse("|"));
    string[][] InStr=new string[strin.Length][];
    for (int i = 0; i < strin.Length; i++)
    {
    InStr[i] = strin[i].Split(char.Parse(","));

    }

    不过让我又多了2种解决办法,由衷感谢。

    2013年11月27日 6:17
  • 用Split方法先分离,然后借助3.5的扩展方法进一步根据逗号进行键值对分离,代码如下:

    string s = "3,0|5,0|6,0|7,0|8,0|9,0|";
                string[] values = s.Split(new char[]{'|'},StringSplitOptions.RemoveEmptyEntries);
     
                var result = (from item in values
                             let sv = item.Split(',')
                             select new
                             {
                                 Key = sv[0],
                                 Value = sv[1]
                             });

    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report


    这个就是linq表达式吧,这么高级的东西还没用过呢,
    2013年11月27日 6:19