在C#中拆分字符串?

时间:2012-06-22 10:17:57

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

我正试图在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();

            }

4 个答案:

答案 0 :(得分:6)

您可以尝试以下操作,首先将其拆分为空格,然后使用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);
    }

答案 1 :(得分: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(); 
    }

答案 2 :(得分:1)

带有命名组的正则表达式似乎非常适合:

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...
}

答案 3 :(得分:0)

您也可以使用

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);