C# 使用不同的数据类型和空格分隔读取输入

C# 使用不同的数据类型和空格分隔读取输入,c#,C#,我试图找出如何编写代码,让用户在一行中输入三个值(string、int、int),并用空格分隔这些值 我曾想过使用String.Split方法,但只有当所有值都具有相同的数据类型时,这种方法才有效 如何使用不同的数据类型 例如: 用户可能想要输入 你好2354 我使用的是控制台应用程序C#您需要做的是在字符串变量中获取“Hello 23 54”。按“”拆分并处理它们 string value = "Hello 23 54"; var listValues = value.Split(' ').T

我试图找出如何编写代码,让用户在一行中输入三个值(string、int、int),并用空格分隔这些值

我曾想过使用String.Split方法,但只有当所有值都具有相同的数据类型时,这种方法才有效

如何使用不同的数据类型

例如: 用户可能想要输入

你好2354


我使用的是控制台应用程序C#

您需要做的是在字符串变量中获取“Hello 23 54”。按“”拆分并处理它们

string value = "Hello 23 54";
var listValues = value.Split(' ').ToList();
之后,您必须将每个项目从listValues解析为相关类型


希望有帮助

第一个问题是,您需要确定用户自己输入的文本是否可以包含空格。例如,是否允许以下情况

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);
}
Match m=Regex.Match(输入,@“^(?.+)(?(\+\124; \-)?\ d+(\+\124; \-)?\ d+)”;
如果(m.成功)
{
string stringValue=m.Groups[“text”].Value;
int num1=转换为32(m.Groups[“num1”].值);
int num2=转换为32(m.Groups[“num2”].值);
}

顺便说一句:你问题的以下部分让我皱眉:

我曾想过使用String.Split方法,但只有当所有值都具有相同的数据类型时,这种方法才有效

字符串始终只是一个字符串。它是否包含文本、您的电子邮件地址或您的银行帐户余额。它总是只是一系列的角色。字符串包含数字的概念就是您的解释

因此,从程序的角度来看,您给出的字符串是一系列字符。对于拆分,内容的真正语义是什么根本不重要


这就是拆分部分与转换部分分开的原因。您需要告诉应用程序第一部分是字符串,第二和第三部分应该是数字。这就是你需要类型转换的原因。

你把事情弄糊涂了。字符串为空或包含字符序列。它从不包含其他数据类型。但是,它可能包含可以解释为数字、日期、颜色等的部分。。。(但它们仍然是字符串)<代码>“123”不是
int
!它是一个包含数字的字符串

为了提取这些片段,您需要做两件事:

  • 将字符串拆分为几个字符串部分
  • 将表示整数的字符串部分转换为
    int
    类型(
    System.Int32

  • 在您拆分并尝试解析之前,所有数据都是一个
    字符串。@Carra谢谢您,Carra。你能给我举个例子吗?
    String.Split
    只适用于一种数据类型:
    String
    。您需要做的是将字符串拆分为各个部分,然后将这些部分解析为各自的数据类型。
    string[]listValues=value.split(“”)就足够了。是的,我知道,我只是想用他的例子@拉斐尔·里贝罗谢谢你,拉斐尔,这很有帮助。我还有一个问题。可以将两个int值保存到变量中吗?非常乐意!ˆˆ例如,可以使用foreach将拆分的每个值放入数组或列表中。如果这就是我在你的问题中所理解的谢谢你,Thorsten,这真的很有帮助。我还有一个问题。是否可以将两个int值保存到变量中?好吧,这就是我的代码已经在做的。。。
    num1
    num2
    变量由字符串.Ohh中的
    int
    值填充。既然如此,非常感谢你。这就解决了!顺便问一下,您知道使用正则表达式或正则表达式的系统参考吗?我的visual studio似乎无法识别“匹配”@Shoxxer使用System.Text.RegularExpressions将
    添加到类文件中。关于你问题的一部分,我在回答中补充了一点。也许你应该读一下,以便更好地理解术语。
    
    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.");
    }