2014-07-18 68 views
0

我有一个星期几的字符串。我用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

这个检查if(weekDayName [5] .Length> 0)'应该是if(weekDayName.Length> 0)'。目前您正在尝试检查字符串的长度,而不是数组的长度。但是,必须有更好的方式来处理这个问题,为什么不使用[DayOfWeek](http://msdn.microsoft.com/zh-cn/library/system。dayofweek(v = vs.110).aspx)enum – Habib

+1

我很好奇你为什么要在DateTime为你提供这些数据时解析出这些数据:) – Codeman

+0

Pheonixblade9,我实际上是从注册表中获取该字符串。 – smr5

回答

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

+0

谢谢!那做了魔术。 – smr5

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; 
     } 

} 
0

如果你愿意尝试的LINQ(这是C#3.5和更高的语言功能,只要包括System.Linq namespace)你能做到这一点是这样的:

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

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

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)))) 
{ 

} 

试试这个,让我知道,如果你有任何担忧。