读取具有不同数据类型和空间分隔的输入

时间:2016-11-21 13:26:59

标签: c#

我正在试图弄清楚如何编写代码让用户在一行中输入三个值(string,int,int)来分隔值。

我想过用String.Split方法做这个,但只有在所有值都具有相同的数据类型时才有效。

如何使用不同的数据类型?

例如: 用户可能想要输入

  

你好23 54

我正在使用控制台应用程序C#

3 个答案:

答案 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!它是一个包含数字的字符串。

为了提取这些部分,您需要做两件事:

  1. 将字符串拆分为多个字符串部分。
  2. 将应该代表整数的字符串部分转换为int类型(= System.Int32)。
  3. 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中的每个项目解析为相关类型。

希望它有所帮助。 ;)