如果字符串包含关键字,C#如何写入整个数组

时间:2016-11-08 21:27:51

标签: c# arrays string contains

我正在搜索stringarray中的字符串是否包含关键字。 如果字符串得到匹配,我希望在控制台上输出找到字符串的数组。

Sofar我设法输出了在stringarray中包含关键字的每个字符串。

我试图通过输出数组来解决这个问题,但后来我得到了这个消息" 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 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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;
}

这可能会对你有帮助。