2016-11-08 75 views
0

我在搜索如果一個字符串內的字符串包含關鍵字。 如果一個字符串得到匹配,我想要在控制檯上輸出找到該字符串的數組。C#如何編寫整個數組如果字符串包含關鍵字

我已經設法輸出每個包含stringarray內的關鍵字的字符串。

我試圖通過輸出數組insteed來解決這一點,但後來我得到這個消息「System.String []」

然而,這不是我的意圖。我想要顯示數組。我想知道,我該怎麼做?

//對不起,對英文不好。

下面是我的代碼的相關部分:

List<string[]> loggbok = new List<string[]> { }; 
    string[] log = new string[3]; //date, title, post 
    DateTime date = DateTime.Now; 
    log[0] = "\n\tDate: " + date.ToLongDateString() + " Time: " + date.ToShortTimeString(); 
    Console.Write("\tTitle: "); 
    log[1] = "\tTitle: " + Console.ReadLine(); 
    Console.Write("\tPost: "); 
    log[2] = "\tPost: " + Console.ReadLine(); 
    loggbok.Add(log); 
    log = new string[3]; 
    Console.Write("\n\tSearch: "); 
    string keyWord; 
    keyWord = Console.ReadLine(); 
    foreach (string[] item in loggbok) 
    { 
     foreach (var s in item) 
     { 
      if (s.Contains(keyWord)) 
      { 
       Console.WriteLine(item); 
      } 
     } 
    }`enter code here` 

回答

2

爲了顯示整個陣列試試這個:

Console.WriteLine(String.Join("\r\n", item)); 

可以過濾數組是這樣的:

Console.WriteLine(String.Join("\r\n", item.Where(item => item.Contains(keyWord)).ToArray()); 

string[] filtered = item.Where(s => s.Contains(keyWord)).ToArray(); 
Console.WriteLine(String.Join("\r\n", filtered)); 

如果要過濾整個loggbok (字符串數組列表)使用擴展的SelectMany。

string[] filtered = loggbok.SelectMany(s => s.Contains(keyWord)).ToArray(); 
Console.WriteLine(String.Join("\r\n", filtered)); 
+0

這很完美!我使用了「Console.WriteLine(String.Join(」\ r \ n「,item));」 消息得到顯示,因爲我希望但消息顯示兩次。你知道爲什麼嗎? – Gobban

+0

沒關係,現在我得到了懶惰......哈哈! 「打破;」修復。謝謝 ;) – Gobban

0

如果我正確理解你的問題,你想整個陣列,其中關鍵字已經找到。 你做錯了什麼是你的狀態Console.WriteLine(item)哪些只會打印該項目。

取而代之,如果在該數組中找到關鍵字,則返回true,如果沒有發生該函數,則返回false。你的代碼看起來像這樣:

string keyWord; 
keyWord = Console.ReadLine(); 
foreach (string[] item in loggbok) 
{          
    if (checkItem(item)) { 
     for(int i = 0; i < item.Length; i++){ 
      Console.WriteLine(item[i]); 
     } 
    } 
} 

public bool checkItem(string[] item, string keyWord) { 
    foreach(var s in item) { 
    if(s.Contains(keyWord)) 
     return true; 
    } 
    return false; 
} 

這可能對你有幫助。

相關問題