【问题标题】:Splitting string in C#?在 C# 中拆分字符串?
【发布时间】:2012-06-22 10:17:56
【问题描述】:

我正在尝试像这样在 C# 中拆分字符串

COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C

应该是

word1     word2       word3      word4     word5   word5
COMMSTR1 NAC-NAM-P-C FCPANAM1 NAC-NAM-P-C  CHAZEL1 NAT-CBM-P-C

在上面它包含三个单词,有时它可能包含两个单词或一个单词。 我怎样才能得到高于输出。我在下面尝试但卡住了。

class Program
        {
            static void Main(string[] args)
            {
                string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";

                string[] words = str.Split(' ');

                 foreach(string word in words)
                    {
                        Console.WriteLine("{0}",word);
                    }

                    Console.ReadLine();

            }

【问题讨论】:

  • 尝试将字符串分隔符从 ' ' 更改为 '|'然后使用str.Split('|');
  • 它们是制表符分隔的还是空格分隔的?
  • 是否总是先按空格(“”)然后按第一个连字符(“-”)?
  • 标准是什么?您使用的是Split(' '),但这对COMMSTR1-NAC-NAM-P-C有什么帮助?是数字吗?
  • @DanielA.White space delimited..

标签: c# .net string visual-studio-2010 visual-studio


【解决方案1】:

您可以尝试以下方法,首先将其拆分为空格,然后使用IndexOf 从单词中获取休息。 :

 string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";
 string[] words = str.Split(' ');
 List<string> list = new List<string>();
 foreach (string word in words)
   {
            int index = word.IndexOf('-'); // as per Daniel's suggestion
            list.Add(word.Substring(0,index));
            list.Add(word.Substring(index+1));
    }

//用于打印

    foreach (string tempStr in list)
    {
        Console.WriteLine(tempStr);
    }

【讨论】:

  • 我会缓存对IndexOf的调用。
  • @Habib.OSU 如何打印我从未使用过 List 的单词。
  • @Habib.OSU 我想将所有 6 个不同的单词存储在不同的变量中。
  • @Viswanathan make foreach(var s in stringList){ Console.WriteLine("{0} ",s);}
  • @Habib.OSU 但是我怎样才能将它存储在不同的变量中。
【解决方案2】:
    static void Main(string[] args)
    {
        string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";

        string[] flag = str.Split(' ');
        List<string> words = new List<string>();
        foreach (string f in flag)
        {
            words.Add(f.Split('-')[0]);
            words.Add(f.Remove(0, f.IndexOf('-') + 1));
        }

        foreach (string word in words)
        {
            Console.WriteLine("{0}", word);
        }

        Console.ReadLine(); 
    }

【讨论】:

    【解决方案3】:

    带有命名组的正则表达式似乎很适合这里:

    var pattern=
        @"^(?<word1>[^-]*)-(?<word2>[^ ]*) "
        +@"(?<word3>[^-]*)-(?<word4>[^ ]*) "
        +@"(?<word5>[^-]*)-(?<word6>.*)$";
    var input="COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";
    var m=Regex.Match(input,pattern);
    if(m.Success)
    {
        var word1=m.Groups["word1"].Value;
        var word2=m.Groups["word2"].Value;
        //etc...
    }
    

    【讨论】:

      【解决方案4】:

      你也可以使用

      Split(new char[] { '-' }, 2);
      

      仅在第一次出现 - 时拆分。 所以首先你Split(' ') 然后Split(new char[] { '-' }, 2);

      @Habib.OSU 答案的修改版本将如下所示:

      string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";
      string[] words = str.Split(' ');
      List<string> list = new List<string>();
      foreach (string word in words)
      {
              list.AddRange(word.Split(new char[] { '-' }, 2));
      }
      foreach(var s in list) Console.WriteLine(s);
      

      【讨论】:

        猜你喜欢
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多