我提示用户在一个提示中输入他们的第一个中间名和姓氏。 因此,如果他们键入例如John Ronald Doe,我如何从该字符串中获取这些值并将它们分配给fname,mname,lname,以创建一个获取这些值的人员构造函数。
基本上我的问题是如何在一个提示中为用户提取多个值,然后将它们分配给构造函数的不同变量。
谢谢!
答案 0 :(得分:4)
抓住线然后在白色空间分开。您必须进行一些输入验证以确保它们实际输入fName mName lName
但我会留给您,因为您所做的事情取决于应用程序需要多强大。我的意思是,如果用户只输入两个单词会发生什么?你只是假设它的名字和姓氏并将其中间名设置为String.Empty
吗?如果他们输入4或5个单词会怎么样?
string[] tokens = Console.ReadLine().Split(' ');
if (tokens.Length == 3)
{
// do assignment
}
关于你的评论;
这或多或少是正确的。真正发生的是ReadLine()
正在返回一个字符串。我只是直接在该结果上调用Split(' ')
。如果你愿意,你可以把它分成两行,但没有理由。 Split(char delimiter)
是String
类中的实例方法。它需要一个char并返回一个字符串数组。我正在使用令牌,因为它是一种常见术语。该行由三个令牌构成,即第一个,中间和姓氏。重要的是要理解我没有向数组添加任何内容,Split(' ')
返回一个数组。 string[] tokens
只是声明string[]
类型的引用,我不必担心大小或类似内容。
从输入中获取一组int的示例。注意,如果任何输入不是有效整数,则会抛出异常。
int[] myInts = Console.ReadLine.Split(' ').Select(x => int.Parse(x)).ToArray();
在这个例子中,我在分割的结果上使用LINQ。 Split返回一个字符串数组。 Select
遍历该数组并应用我传递给它的每个值的lambda表达式。最好将x
视为当前值。此处Select
调用大致相当于;
List<int> myInts = new List<int>();
foreach (string s in tokens)
{
myInts.Add(int.Parse(s));
}
int[] myIntArray = myInts.ToArray();
如果您不信任用户输入,则应使用TryParse
。我不知道你是否可以将它作为lambda表达式的一部分使用(如果可以的话,我不会感到惊讶,但这似乎是屁股上的痛苦所以我不会打扰)而是我会这样做;
List<int> myInts = new List<int>();
int temp;
foreach (string s in tokens)
{
if (int.TryParse(s, temp)
myInts.Add(temp);
else
// the input wasn't an int
}
int[] myIntArray = myInts.ToArray();