2016-11-08 166 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; 
} 

这可能对你有帮助。

相关问题