2014-07-18 91 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)))) 
{ 

} 

試試這個,讓我知道,如果你有任何擔憂。