我想做这样的事情:
string a = Console.Readline();
string[] b = a.Split(' ');
string i = b[0];
string j = b[1];
现在的问题是,放置'string j'可能是可选的,就像输入可能是hi hello
,这里hello
是可选的。如果有人没有放置任何东西来打招呼,如何使代码正常工作。
谢谢。
答案 0 :(得分:0)
由于用户输入的“命令”将在b
之后存储在数组中(例如,基于您的代码的split
),所以我认为没有必要将它们单独存储自己变数。因此,避免了当前设置中的问题。另一方面,如果要查看是否键入了特定的“命令”,则可以执行以下操作:
static void Main(string[] args)
{
Console.Write("> ");
string input = Console.ReadLine();
// Doing it like this will automatically remove blanks from the resulting array
// so you won't have to clean it up yourself
string[] commands = input.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
// Contains is from the System.Linq namespace
// this will allow you to see if a given value is in the array
if (commands.Contains("hi"))
{
Console.WriteLine("> The command 'hi' has been received.");
}
Console.Read();
}
您可以使用Linq的Contains
方法检查命令字符串数组中是否存在特定值。
如果您只想查看数组中的所有命令,那么简单的for loop
就足够了。
// The Length property of the array will give you the
// number of items it contains
for(int i = 0; i < commands.Length; i++)
{
Console.WriteLine("> Command read: {0} ", commands[i]);
}
还有一件事情,我建议您对应用程序将收到的输入进行规范化,以避免在过滤输入时出现问题。您可以通过调用ToLower
可用的ReadLine
方法来做到这一点:
string inputs = Console.ReadLine().ToLower();
快乐编码:)
答案 1 :(得分:0)
您可以使用Length
属性检查拆分数组中有多少个元素。
如果数组中没有足够的元素来分配可选值,则可以将其设置为null
。
在其余代码中,您只需要在使用可选值之前对它进行空检查。
他喜欢的东西会起作用:
string input = Console.ReadLine();
string[] tokens = input.Split(' ');
string hi = tokens[0];
string optional = tokens.Length > 1 ? tokens[1] : null; // make sure we have enough elements
Console.WriteLine(hi);
// null check before using the optional value
if (optional != null)
Console.WriteLine(optional);
// or
Console.WriteLine(optional ?? "Optional value is null..");
答案 2 :(得分:0)
我不是使用索引位置访问数组特定元素,而是使用foreach
循环遍历列表:
string a = Console.ReadLine();
string[] b = a.Split(' ');
foreach (string elem in b)
{
Console.WriteLine(elem); // Do whatever you want with each element
}
Console.ReadLine();