当我使用String.Split后续数组只包含第一个值?
问题描述:
阅读完文本文件后,我通过一种方法传递信息,该方法将字符串分开以获取每个字段的必需信息。我已经到了基于新行分割字符串的地步,但它超出了我为什么当我显示后续数组(或列表转换为)时,它只显示第一个分割字符串的前半部分。当我使用String.Split后续数组只包含第一个值?
的输入字符串外观的一个例子:
ASSIGNMENT
In-Class Test 02/07/2014
In-Class Test 21/04/2013
找到我下面的代码(numLines
变量是简单地看它被分成了正确的行数,因为它应该)
private void assignmentfinder(string brief, string id)
{
string searchcrit = "ASSIGNMENT";
string assignment = brief.Substring(brief.IndexOf(searchcrit) + searchcrit.Length);
string[] assignmentsplit;
assignmentsplit = assignment.Split('\t');
List<string> Assign = new List<string>(assignmentsplit);
listBox2.DataSource = Assign;
int numLines = assignment.Split('\n').Length;
richTextBox1.Lines=(assignmentsplit);
}
我得到的输出是:
In-Class Test
02/07/2014
尽管它应该显示的第二个字符串也分开。有任何想法吗?
答
你的错误在于你为每个选项卡分割(\t
)。正如你所说的为新线拆分:
private void assignmentfinder(string brief, string id)
{
string searchcrit = "ASSIGNMENT";
string assignment = brief.Substring(brief.IndexOf(searchcrit) + searchcrit.Length);
string[] assignmentSplit = assignment.Split('\n'); // splitting at new line
richTextBox1.Lines = assignmentSplit;
listBox2.DataSource = assignmentSplit.ToList();
}
我希望这有助于。
编辑:只是固定一个巨大的错误
问:是故意的,字符串id
是从未使用过?
答
问题在于“简短”变量的值。确保你输入“简短”变量的值实际上包含“\ n”和“\ t”。
答
你可以使用正则表达式是这样的:
private void assignmentfinder(string brief, string id)
{
Regex rgxLines = new Regex(@"^(.*?)[ \t]+([0-9]{2}\/[0-9]{2}\/[0-9]{4})", RegexOptions.Multiline);
MatchCollection mLines = rgxLines.Matches(brief);
foreach (Match match in mLines)
{
richTextBox1.Text += String.Format("Test: {0}{1}Date: {2}{1}{1}",
match.Groups[1].Value,
Environment.NewLine,
match.Groups[2].Value);
}
}
答
你可以使用LINQ到分裂的新行,然后在标签,跳过第一行,然后聚合成字符串列表:
string brief = @"ASSIGNMENT
In-Class Test 02/07/2014
In-Class Test 21/04/2013";
List<string> theLines = new List<string>();
var lines = brief.Split('\n').Skip(1).Select (b => b.Split('\t'));
foreach (var line in lines)
{
for (int i = 0; i < line.Length; i++)
{
theLines.Add(line[i]);
}
}
这里唯一的想法是逐步调试你的代码。 – duDE
尝试从列表构造函数中删除“assignmentSplit”参数。我的猜测是,您将列表限制为比预期数量少的项目。 –
什么是期望的输出?我不清楚你到底在做什么。 – Crowcoder