none
问一个字符串处理的问题。。。 RRS feed

  • 问题

  • 问一个问题,期待高手。。
    有很多数据(格式为字符串,数量不限,但其中不含"|||")
    之后按照以下四种格式(四种格式都可以)拼接成一个大字符串

    字符串1|||字符串2|||字符串3|||字符串4
    |||字符串1|||字符串2|||字符串3|||字符串4
    字符串1|||字符串2|||字符串3|||字符串4|||
    |||字符串1|||字符串2|||字符串3|||字符串4|||

    然后编写一个函数(参数为 string 数据(上面的四种格式都可以), int i)

    最后要使函数return 字符串i

    2011年1月26日 3:22

答案

  • 第一个问题可以用string.Join()把字符串数组拼接成一个字符串

    string[] rStrings = new string[] { "a", "b", "c", "d", "e", "f" };
    string rString = string.Join("|||", rStrings);
    

    第二个就反过来,用string.Split()把字符串拆成字符串数组(为什么那里是i - 1,因为问题的字符串1对应数组的第0个元素)

    string Pick(string rpString, int i)
    {
      return rpString.Split(new string[] { "|||" }, StringSplitOptions.RemoveEmptyEntries)[i - 1];
    }
    

    2011年1月26日 4:26
  • public void Test()
    {
      string[] test = 
      { 
        "字符串1|||字符串2|||字符串3|||字符串4", 
        "|||字符串1|||字符串2|||字符串3|||字符串4",
        "字符串1|||字符串2|||字符串3|||字符串4|||", 
        "|||字符串1|||字符串2|||字符串3|||字符串4|||" 
      };
    
      Regex regExp = new Regex(@"(?<=(^|\|{3}))[^|]+(?=(\|{3}|$))", RegexOptions.Compiled);
      //例如都取每组的第二个
      foreach (var line in test)
      {
        string result = regExp.Matches(line)[1].Value;
        Console.WriteLine(result);
      }
    }
    
    不用解释了吧

    2011 c# mvp China
    2011年1月26日 5:02
    版主
  • //函数的话,用Lambda演示一下
    Func<string, int,string> GetID = (s, i) => Regex.Matches(s, @"(?<=(^|\|{3}))[^|]+(?=(\|{3}|$))")[i].Value;
    Console.WriteLine(GetID(test[1], 0));
    Console.WriteLine(GetID(test[1], 1));
    Console.WriteLine(GetID(test[1], 2));
    Console.WriteLine(GetID(test[1], 3));
    
    写成方法就是
    public static string GetIDString(string line, int index)
    {
      MatchCollection mc = Regex.Matches(line, @"(?<=(^|\|{3}))[^|]+(?=(\|{3}|$))");
      return index < mc.Count ? mc[index].Value : "";
    }
    


    2011 c# mvp China
    2011年1月26日 5:33
    版主
  • dear

    您可使用String.Split方法来处理,將不必要的字符拆掉,详细用法请看,自己动手做比较实在噢~

    [C#.NET][VB.NET] 字串分割 / String.Split
    http://www.dotblogs.com.tw/yc421206/archive/2010/07/01/16314.aspx

     

    若是要组合字符,你写一个方法参数有:字串阵列,插入字串,组合样式,然后在方法里写要组合的样式,回传所需的结果,或者也可以把所有组合样式都重新排列

    string GetSpecString(string[] StrArray,string InsertString,int SortMode)

    string GetSpecString(string[] StrArray,string InsertString)

    要怎样排列就看你自己处理了,有关动态字串处理强烈建议使用StringBuilder 類別,详细用法请参考

    http://www.dotblogs.com.tw/yc421206/archive/2010/10/26/18575.aspx

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年1月27日 2:14

全部回复

  • 第一个问题可以用string.Join()把字符串数组拼接成一个字符串

    string[] rStrings = new string[] { "a", "b", "c", "d", "e", "f" };
    string rString = string.Join("|||", rStrings);
    

    第二个就反过来,用string.Split()把字符串拆成字符串数组(为什么那里是i - 1,因为问题的字符串1对应数组的第0个元素)

    string Pick(string rpString, int i)
    {
      return rpString.Split(new string[] { "|||" }, StringSplitOptions.RemoveEmptyEntries)[i - 1];
    }
    

    2011年1月26日 4:26
  • 您好,请参考:

            public static String GetIString(String str, int i) //这里我假设索引是从1开始
            {
                string[] stringSeparators = new string[] { "|||" };
                String[] result;
                result = str.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
                if (result.Length < i)
                {
                    throw new Exception("超出索引!");
                }
                return result[i-1];
            }

    2011年1月26日 4:37
    版主
  • public void Test()
    {
      string[] test = 
      { 
        "字符串1|||字符串2|||字符串3|||字符串4", 
        "|||字符串1|||字符串2|||字符串3|||字符串4",
        "字符串1|||字符串2|||字符串3|||字符串4|||", 
        "|||字符串1|||字符串2|||字符串3|||字符串4|||" 
      };
    
      Regex regExp = new Regex(@"(?<=(^|\|{3}))[^|]+(?=(\|{3}|$))", RegexOptions.Compiled);
      //例如都取每组的第二个
      foreach (var line in test)
      {
        string result = regExp.Matches(line)[1].Value;
        Console.WriteLine(result);
      }
    }
    
    不用解释了吧

    2011 c# mvp China
    2011年1月26日 5:02
    版主
  • //函数的话,用Lambda演示一下
    Func<string, int,string> GetID = (s, i) => Regex.Matches(s, @"(?<=(^|\|{3}))[^|]+(?=(\|{3}|$))")[i].Value;
    Console.WriteLine(GetID(test[1], 0));
    Console.WriteLine(GetID(test[1], 1));
    Console.WriteLine(GetID(test[1], 2));
    Console.WriteLine(GetID(test[1], 3));
    
    写成方法就是
    public static string GetIDString(string line, int index)
    {
      MatchCollection mc = Regex.Matches(line, @"(?<=(^|\|{3}))[^|]+(?=(\|{3}|$))");
      return index < mc.Count ? mc[index].Value : "";
    }
    


    2011 c# mvp China
    2011年1月26日 5:33
    版主
  • dear

    您可使用String.Split方法来处理,將不必要的字符拆掉,详细用法请看,自己动手做比较实在噢~

    [C#.NET][VB.NET] 字串分割 / String.Split
    http://www.dotblogs.com.tw/yc421206/archive/2010/07/01/16314.aspx

     

    若是要组合字符,你写一个方法参数有:字串阵列,插入字串,组合样式,然后在方法里写要组合的样式,回传所需的结果,或者也可以把所有组合样式都重新排列

    string GetSpecString(string[] StrArray,string InsertString,int SortMode)

    string GetSpecString(string[] StrArray,string InsertString)

    要怎样排列就看你自己处理了,有关动态字串处理强烈建议使用StringBuilder 類別,详细用法请参考

    http://www.dotblogs.com.tw/yc421206/archive/2010/10/26/18575.aspx

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年1月27日 2:14