我正在试图弄清楚如何编写代码让用户在一行中输入三个值(string,int,int)来分隔值。
我想过用String.Split方法做这个,但只有在所有值都具有相同的数据类型时才有效。
如何使用不同的数据类型?
例如: 用户可能想要输入
你好23 54
我正在使用控制台应用程序C#
答案 0 :(得分:2)
第一个问题是你需要决定用户输入的文本是否可以包含空格。例如,是否允许以下内容?
Hello World, it's me 08 15
在这种情况下,String.Split
实际上并没有帮助。
我尝试使用正则表达式。以下可以作为一个起点:
Match m = Regex.Match(input, @"^(?<text>.+) (?<num1>(\+|\-)?\d+) (?<num2>(\+|\-)?\d+)$");
if (m.Success)
{
string stringValue = m.Groups["text"].Value;
int num1 = Convert.ToInt32(m.Groups["num1"].Value);
int num2 = Convert.ToInt32(m.Groups["num2"].Value);
}
BTW:你的问题的以下部分让我皱眉:
我想过用String.Split方法做这个,但只有在所有值都具有相同的数据类型时才有效。
字符串始终只是一个字符串。是否包含文字,电子邮件地址或银行帐户余额。它总是只是一系列人物。字符串包含数字的概念只是您的解释!
所以从程序的角度来看,你给的字符串是一系列字符。而对于分裂而言,内容的真实语义本质上并不重要。
这就是分裂部分与转换部分分开的原因。您需要告诉您的应用程序第一部分是字符串,第二部分和第三部分应该是数字。这就是你需要的类型转换。
答案 1 :(得分:2)
你很困惑。字符串是null
,空或包含一系列字符。它从不包含其他数据类型。但是,它可能包含可以解释为数字,日期,颜色等的部分......(但它们仍然是字符串)。 "123"
不是int
!它是一个包含数字的字符串。
为了提取这些部分,您需要做两件事:
int
类型(= System.Int32
)。string input = "Abc 123 456"
string[] parts = input.Split(); //Whitespaces are assumed as separators by default.
if (parts.Count == 3) {
Console.WriteLine("The text is \"{0}\"", parts[0]);
int n1;
if (Int32.TryParse(parts[1], out n1)) {
Console.WriteLine("The 1st number is {0}", n1);
} else {
Console.WriteLine("The second part is supposed to be a whole number.");
}
int n2;
if (Int32.TryParse(parts[2], out n2)) {
Console.WriteLine("The 2nd number is {0}", n2);
} else {
Console.WriteLine("The third part is supposed to be a whole number.");
}
} else {
Console.WriteLine("You must enter three parts separated by a space.");
}
答案 2 :(得分:0)
你要做的就是得到&#34;你好23 54&#34;在一个字符串变量中。拆分&#34; &#34;并对待他们。
string value = "Hello 23 54";
var listValues = value.Split(' ').ToList();
之后,您必须将listValues中的每个项目解析为相关类型。
希望它有所帮助。 ;)