好的,为了使其更容易理解,下面是一个代码片段:
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 =“ test”,则应该同时打印text1和text2,但是如果它是“ Another”,则应该仅打印test2。>
您认为这是可能的吗?如果可以,我应该使用哪种容器,因为数组似乎太...嗯,不是动态的,不能用于此目的。
答案 0 :(得分:1)
将for loop
与list
一起使用是最基本的解决方案。
类似这样的东西:
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();
}
示例输出