Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中拆分字符串?_C#_.net_String_Visual Studio 2010_Visual Studio - Fatal编程技术网

在C#中拆分字符串?

在C#中拆分字符串?,c#,.net,string,visual-studio-2010,visual-studio,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 在上面,它包含三个单词,有时可能包含两个单词或一个单词。 我怎样才能得到高于输出的结果。我在

我正试图像这样用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();

            }

您可以尝试以下操作,首先在空格处拆分,然后使用
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));
    }
static void Main(字符串[]args)
{
string str=“COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C”;
字符串[]标志=str.Split(“”);
列表单词=新列表();
foreach(标志中的字符串f)
{
加(f.Split('-')[0]);
添加(f.Remove(0,f.IndexOf('-')+1));
}
foreach(单词中的字符串)
{
Console.WriteLine(“{0}”,word);
}
Console.ReadLine();
}

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

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...
}
var模式=
@"^(?[^-]*)-(?[^ ]*) "
+@"(?[^-]*)-(?[^ ]*) "
+@"(?[^-]*)-(?.*)$";
var input=“COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C”;
var m=Regex.Match(输入,模式);
如果(m.成功)
{
var word1=m.Groups[“word1”].值;
var word2=m.Groups[“word2”].值;
//等等。。。
}
您也可以使用

Split(new char[] { '-' }, 2);
仅在第一次出现-时分割。 因此,首先要进行
Split(“”)
,然后进行
Split(newchar[]{'-'},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);
string str=“COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C”;
string[]words=str.Split(“”);
列表=新列表();
foreach(单词中的字符串)
{
AddRange(word.Split(新字符[]{'-},2));
}
foreach(列表中的变量s)控制台。WriteLine(s);

尝试将字符串分隔符从“”更改为“|”,然后使用
str.Split(“|”)它们是以制表符分隔还是以空格分隔?是否总是在空格(“”)上拆分,然后在第一个连字符(“”)上拆分?标准是什么?您使用的是
拆分(“”)
但是这对这个有什么帮助呢
COMMSTR1-NAC-NAM-P-C
?是数字吗?@DanielA.White space delimited..我会将调用缓存到
IndexOf
@Habib.OSU如何打印我从未使用过的单词列表。@Habib.OSU我想将所有6个不同的单词存储在不同的变量中。@Viswanathan make
foreach(stringList中的var s){Console.WriteLine({0}),s);}
@Habib.OSU但如何将其存储在不同的变量中。
Split(new char[] { '-' }, 2);
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);