使用null位置拆分字符串问题

时间:2014-07-18 17:04:44

标签: c# arrays string split

我有一周的日子。我在C#中解析它并将每一天存储在一个单独的变量中。例如:

string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun";

我用''分裂它们。作为分隔符:

var weekDayName = weekDay.Split(',');
var firstDay = weekDayName[0];
var secondDay = weekDayName[1];
var thirdDay = weekDayName[2];
var fourthDay = weekDayName[3];
var fifthDay =  weekDayName[4];
var sixDay = weekDayName[5];
var seventhDay = weekDayName[6];

一切正常。但是,字符串会动态更改。用户指定一周中的几天。例如,字符串weekDayName只能包含" Mon,Tue"。但是我遇到的问题是,如果不是所有的位置都包含它将会失败的值。

  

索引超出了数组的范围。

我试过了:

if (weekDayName[5].Length >0)
{
    var sixDay = weekDayName[5];
}

但它仍然失败......

如何检查并获取现有数据的值,如果缺少某些位置我只是忽略它们?

我想要实现的目标是:

DateTime currentDay = new DateTime();
currentDay = DateTime.Now;

if (currentDay.ToString("ddd") == firstDay || currentDay.ToString("ddd") == seconday)
{
    // I will check the currentDay against every day of the week
    //do something
}

4 个答案:

答案 0 :(得分:2)

您的指数超出范围并非来自您的想法。我当然假设这是因为你试图检查一个从未设置的元素的长度,如果用户输入Mon,Tue

var enteredDays = weekDay.Split(',');
for(var i = 0; i < enteredDays.Length; i++)
{
    var day = enteredDays[i];
    if(i == 0)
       first = day;
    else if(i == 1)
       second = day;

    ... etc....
}

现在,当您需要使用从数组中提取的值时,可以检查String.IsNullOrEmpty(..yourDay..)。您不能.Length使用null,因为它们是string.Empty并且会爆炸,除非您将它们全部默认为{{1}}。

答案 1 :(得分:0)

必须有一些更聪明的方法,但由于我不知道字符串的来源,我很难做出更好的解决方案。

但是,根据当前的要求,您可以执行以下操作:

string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun";

List<String> weekDaysList = weekdayName.Split(',').ToList();

foreach (var weekDay in weekDaysList.Take(2))
{
       if (weekDay == DateTime.Now.ToString("ddd"))
       {
              // do something
              break;
       }

 }

答案 2 :(得分:0)

如果您愿意尝试使用Linq(这是C#3.5及更高版本的语言功能,只需包含System.Linq namespace),您可以这样做:

string[] names = weekdayName
    .Split(',')
    .Select(s => s.Trim())
    .Where(s => s.Length > 0)
    .ToArray();

names数组现在包含所有非空日名称,没有任何前导或尾随空格。

答案 3 :(得分:0)

哇,这是一个简单检查的代码,正如其他成员所提到的,你可以使用LINQ在单个查询中合并所有验证,如:

string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun";
var wc = weekdayName.Split(',');

if (wc.Any(str => str.Contains(DateTime.Today.DayOfWeek.ToString().Substring(0,3))))
{

}

尝试此操作,如果您有任何疑虑,请与我们联系。