C# 如何获取分隔符计数作为输入?

C# 如何获取分隔符计数作为输入?,c#,delimiter,C#,Delimiter,在程序中,我必须处理这样的输入表 a:1 b:2 c:3 ?:6 #:14 显然,分隔符是“:”和“\n” 但是,这样的输入将捕获异常 ::2 我还想将“:”存储到一个字符列表中 如何修改这些代码? 我应该把试水放在哪里 String[] str; str = textbox.Text.Trim().Split(':', '\n'); for (i = 0; i < str.Length; i = i + 2){ char tempC; float tempFre

在程序中,我必须处理这样的输入表

a:1
b:2
c:3
?:6
#:14  
显然,分隔符是“:”和“\n”

但是,这样的输入将捕获异常

::2
我还想将“:”存储到一个字符列表中

如何修改这些代码? 我应该把试水放在哪里

String[] str;
str = textbox.Text.Trim().Split(':', '\n');

for (i = 0; i < str.Length; i = i + 2){
    char tempC;
    float tempFreq;

    if (char.TryParse(str[i], out tempC))
        c.Add(tempC);

    if (float.TryParse(str[i + 1], out tempFreq))
        freq.Add(tempFreq);

}
String[]str;
str=textbox.Text.Trim().Split(“:”,“\n”);
对于(i=0;i
首先,您需要逐行解析文本。请使用
属性

然后,您可以检查当前行是否以
开头:

var lines = textbox.Lines;

foreach(var line in lines)
{
    if(line.StartsWith(':')) 
    { 
        c.Add(':');
        float tempFreq;
        if (float.TryParse(line.Split(':').Last(), out tempFreq))
             freq.Add(tempFreq);
    }
    else
    {
       char tempC;
       float tempFreq;
       string[] parts = line.Split(':');
       if (char.TryParse(parts[0], out tempC))
           c.Add(tempC);

       if (float.TryParse(parts[1], out tempFreq))
          freq.Add(tempFreq);
    } 
}

顺便说一句,我假设它是
WinForms
Lines
属性可能在
WPF
中不存在,如果是这种情况,只需先按换行符拆分文本,然后在行上迭代并执行相同的操作。

String.split
可以使用
StringSplitOptions.removemptyentries
,也可以先拆分线

您的边缘案例示例数据

var text = @"a:1
b:2
c:3
?:6
::2
#:14  ";
LINQ查询,选择字符和浮点作为配对:

float freq = 0;
string[] lines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var lineTokens = lines.Select(l => l.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries))
    .Where(arr => arr.Length == 2 && arr[0].Trim().Length == 1 && float.TryParse(arr[1].Trim(), out freq))
    .Select(arr => new { chr = arr[0].Trim()[0], freq });
输出:

foreach(var x in lineTokens)
    Console.WriteLine("Char:{0} Frequency:{1}", x.chr, x.freq);

Char:a Frequency:1
Char:b Frequency:2
Char:c Frequency:3
Char:? Frequency:6
Char:# Frequency:14

“在结果中拆分并保留分隔符”是一个非常常见的问题-如果您的目标不同,请确保在新问题中明确说明您的案例的特殊之处。