c#如何检查字符串是否是数组中元素的子字符串,然后将其打印出来?

时间:2018-11-02 19:01:46

标签: c# arrays string console

好的,为了使其更容易理解,下面是一个代码片段:

string text1 = "Just a test.";
string text2 = "Another test.";
Console.Write("Search here: ");
string userInput = Console.ReadLine();

if (text1.Contains(userInput))
{
   Console.WriteLine(text1);
} 
else if (text2.Contains(userInput))
{ 
   Console.WriteLine(text2);
} 
else
{
   Console.WriteLine("No match.");
}

现在,我的问题如下:我想拥有许多这些text1 text2字符串,并且我不想编写100行if语句。  所以我想,应该将它们放在一个数组中。但是,我根本无法编写任何能满足我想要的代码:

  • 查找数组中的任何元素是否包含userInput作为子字符串//array.Any?//,然后完整打印出这些元素。

我想打印出包含它作为子字符串的每个元素,因此,如果userInput =“ test”,则应该同时打印text1和text2,但是如果它是“ Another”,则应该仅打印test2。

您认为这是可能的吗?如果可以,我应该使用哪种容器,因为数组似乎太...嗯,不是动态的,不能用于此目的。

4 个答案:

答案 0 :(得分:1)

for looplist一起使用是最基本的解决方案。

类似这样的东西:

List<string> texts = new List<string>(); // a list that holds all your strings
texts.Add("Just a test.");
texts.Add("Another test.");

Console.WriteLine("Search Here");
int num_matched = 0;
for (int i = 0; i < texts.Count; i++) {
    if (texts[i].Contains(userInput)) {
        Console.WriteLine("texts[i]");
        num_matched++;
    }
}
if (num_matched == 0) {
    Console.WriteLine("No match");
}

答案 1 :(得分:0)

我认为您正在寻找类似的东西。使用List而不是数组。然后,您可以使用Linq的Where将列表过滤为仅匹配的列表。

var strings = new List<string> { "Just a test.", "Another test." };

Console.Write("Search here: ");
string userInput = Console.ReadLine();

var matching = strings.Where(s => s.Contains(userInput)).ToList();
if (matching.Count == 0) {
    Console.WriteLine("No match.");
} else {
    foreach (var match in matching) {
        Console.WriteLine(match);
    }
}

请注意,Contains默认情况下区分大小写。如果您希望它不区分大小写,则可以使用s.IndexOf(userInput, StringComparison.CurrentCultureIgnoreCase) > -1

答案 2 :(得分:0)

数组可以很好地用作存储要搜索的字符串的存储机制。您可能应该指定是否需要区分大小写,因为这可能会改变结果。

您可以使用LINQ完成所需的操作:

var possibleStrings = new string[] { "This is a test", "Another test" };
Console.WriteLine("Enter input: ");
var userInput = Console.ReadLine();
foreach (var match in possibleStrings.Where(ps => ps.Contains(userInput))
{
    Console.WriteLine(match);
}

答案 3 :(得分:0)

另一种选择是使用IndexOf方法,该方法使您可以进行不区分大小写的比较。这样,用户不必知道必须将“另一个”大写。

是的,将项目存储在List<string>中比使用数组要容易得多。

这是一个例子:

static void Main(string[] args)
{
    var bookTitles = new List<string>
    {
        "The Catcher in the Rye",
        "Pride and Prejudice",
        "The Great Gatsby",
        "Alice's Adventures in Wonderland",
        "Moby Dick",
        "Gulliver's Travels",
        "Hamlet",
        "The Canterbury Tales",
        "Catch-22",
        "The Adventures of Huckleberry Finn"
    };

    bool tryAgain = true;

    while (tryAgain)
    {
        Console.Write("Enter a search term: ");
        string searchTerm = Console.ReadLine();

        var results = bookTitles.Where(title =>
            title.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase) > -1);

        if (results.Any())
        {
            Console.WriteLine("\nResults:");
            Console.WriteLine(" - " + string.Join("\n - ", results));
        }
        else
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("\nNo matches found.");
            Console.ResetColor();
        }

        Console.Write("\nTry again? (y/n): ");
        if (Console.ReadKey().Key == ConsoleKey.N) tryAgain = false;
        Console.WriteLine("\n");
    }

    Console.Write("\nDone! Press any key to exit...");
    Console.ReadKey();
}

示例输出

enter image description here