【发布时间】:2017-09-15 15:01:19
【问题描述】:
我正在尝试拆分由单词组成的字符串,由分隔符“-”和“,”分隔。问题是我的程序根本不想在“var tokens”中保存任何东西。我已经尝试将“tokens”设置为 string[],尝试使用 char[] 分隔符而不是直接在 Split 方法中放置“-”,并尝试了语法“StringSplitOptions.RemoveEmptyEntries,但没有任何效果。
这是我的代码:
if (!string.IsNullOrEmpty(destin) && string.IsNullOrEmpty(depar))
{
try
{
writer.WriteLine("SearchDest");
writer.WriteLine(destin);
string retur = reader.ReadLine();
Debug.WriteLine(retur);
var tokens = retur.Split('-');
flight.Clear();
foreach (string s in tokens)
{
Debug.WriteLine(s);
String[] flyelem = s.Split(',');
int idf = Convert.ToInt32(flyelem[0]);
String destf = flyelem[1];
String airf = flyelem[2];
int frees = Convert.ToInt32(flyelem[3]);
String datef = flyelem[4];
Flight b = new Flight(idf, destf, airf, frees, datef);
flight.Add(b);
}
dataGridView3.DataSource = null;
dataGridView3.Refresh();
dataGridView3.DataSource = flight;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
线条
string retur = reader.ReadLine();
Debug.WriteLine(retur);
将打印:-6,Moscow,Domodedovo,30,4/3/2017 12:00:00 AM-7,Moscow,Vnukovo,30,4/3/2017 12:00:00 AM-9,Moscow,Vnukovo,40,4/3/2017 12:00:00 AM
和“Debug.WriteLine(s);”行将始终不打印任何内容,只打印一个空格,程序在尝试将字符串解析为 int idf 处的 int 时停止。
我怎样才能解决这个问题并使拆分工作?谢谢。
编辑: 问题已解决。 Tommy Naidich 关于使用 new[] {'-'} 和 Gunther Fox 的建议之一使用 StringSplitOptions.RemoveEmptyEntries 作为第二个参数有效,现在拆分按预期工作。将来会遇到此问题的人的最终代码。谢谢各位。
if (!string.IsNullOrEmpty(destin) && string.IsNullOrEmpty(depar))
{
try
{
writer.WriteLine("SearchDest");
writer.WriteLine(destin);
string retur = reader.ReadLine();
Debug.WriteLine(retur);
string[] output = retur.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
flight.Clear();
foreach (string s in output)
{
Debug.WriteLine(s);
string[] flyelem = s.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
int idf = Convert.ToInt32(flyelem[0]);
string destf = flyelem[1];
string airf = flyelem[2];
int frees = Convert.ToInt32(flyelem[3]);
string datef = flyelem[4];
Flight b = new Flight(idf, destf, airf, frees, datef);
flight.Add(b);
}
dataGridView3.DataSource = null;
dataGridView3.Refresh();
dataGridView3.DataSource = flight;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
【问题讨论】:
-
当然它必须用 split 来做所有事情,因为程序会抛出异常,因为 flyelem[0] 为 null,因为 split 没有起作用。
-
这是因为前导
-导致Split在tokens[0]中生成一个空字符串。使用StringSplitOptions的重载并传递StringSplitOptions.RemoveEmptyEntries。 -
尝试使用
StringSplitOptions.RemoveEmptyEntries作为Split中的第二个参数。 -
确保您的字符正常:有时“-”实际上不是减号而是另一个破折号(n-破折号、m-破折号等)..