Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何拆分空白字符上的数字字符串并转换为整数_C# - Fatal编程技术网

C# 如何拆分空白字符上的数字字符串并转换为整数

C# 如何拆分空白字符上的数字字符串并转换为整数,c#,C#,我正在做一些家庭作业,我需要从用户那里得到一个输入,这是一行用空格分隔的数字。我想拆分这个字符串,然后取出各个数字,这样就可以将它们插入到二进制搜索树中 我尝试了分割函数,并能够消除空白,但我不知道如何“收集”单个数字 string data; string[] newdata = { }; Console.WriteLine("Please enter a list of integers with spaces

我正在做一些家庭作业,我需要从用户那里得到一个输入,这是一行用空格分隔的数字。我想拆分这个字符串,然后取出各个数字,这样就可以将它们插入到二进制搜索树中

我尝试了分割函数,并能够消除空白,但我不知道如何“收集”单个数字

        string data;
        string[] newdata = { };
        Console.WriteLine("Please enter a list of integers with spaces 
                           between each number.\n");
        data = Console.ReadLine();
        newdata = data.Split(null);

        Console.WriteLine(String.Join(Environment.NewLine, newdata));

我想以某种方式从newdata字符串数组中收集元素并将它们转换为整数,但我很难弄清楚如何做到这一点。

保留空格并使用空格“data.split(“”);”进行“拆分”。

您可以按如下操作

var numbers = Console.ReadLine();
var listOfNumbers = numbers.Split(new[]{" "},StringSplitOptions.RemoveEmptyEntries)
                           .Select(x=> Int32.Parse(x));
var listOfNumbers = numbers.Split(new[]{" "},StringSplitOptions.RemoveEmptyEntries)
                   .Select(x=> 
                    {
                        Console.WriteLine(x);
                        if(Int32.TryParse(x,out var number))
                            return number;
                        else
                            throw new Exception("Element is not a number");
                    });
上面的几行根据“空白”分割用户输入,删除中间的任何空条目,然后将字符串数字转换为整数

StringSplitOptions.RemoveEmptyEntries
确保删除空条目。空条目的一个示例是两个分隔符相邻的字符串。例如,
“2 3 4 5”
,在2和3之间有两个空格,这意味着,当您以空格作为分隔符拆分字符串时,数组中会出现一个空元素。这可以通过使用
StringSplitOptions来消除。RemoveEmptyEntries

根据需要的是整数还是小数,可以使用
Int32.Parse
Double.Parse
(或float/decimal等)

此外,您可以包括检查以确保您拥有有效的数字,否则将引发异常。您可以按如下方式更改查询

var numbers = Console.ReadLine();
var listOfNumbers = numbers.Split(new[]{" "},StringSplitOptions.RemoveEmptyEntries)
                           .Select(x=> Int32.Parse(x));
var listOfNumbers = numbers.Split(new[]{" "},StringSplitOptions.RemoveEmptyEntries)
                   .Select(x=> 
                    {
                        Console.WriteLine(x);
                        if(Int32.TryParse(x,out var number))
                            return number;
                        else
                            throw new Exception("Element is not a number");
                    });

这将确保列表中的所有元素都是有效的数字,否则将引发异常。

好的,您可以使用Linq
。选择与
组合的
方法。拆分
方法:

List<int> newData = data.Split(' ').Select(int.Parse).ToList();
最后,如果您希望允许用户有时输入不正确的数据,并且仍然获得有效的整数集合,则可以使用
int.TryParse
并过滤掉解析不正确的值:

List<int> newData = data.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)
                        .Select(s => int.TryParse(s.Trim(), out var n) ? (int?)n : null)
                        .Where(x => x != null)
                        .Select(i => i.Value)
                        .ToList();
List newData=data.Split(新[]{''},StringSplitOptions.RemoveEmptyEntries)
.Select(s=>int.TryParse(s.Trim(),out变量n)?(int?)n:null)
.其中(x=>x!=null)
.选择(i=>i.Value)
.ToList();
确定为代码:

var words = data.Split();
int i;
List<int> integers = new List<int>();
foreach(var s in words)
{
  if (int.TryParse(s, out i)) {integers.Add(i);}
}
// now you have a list of integers
// if using decimal, use decimal instead of integer
var words=data.Split();
int i;
列表整数=新列表();
foreach(大写的var s)
{
if(int.TryParse(s,out i)){integers.Add(i);}
}
//现在你有了一个整数列表
//如果使用十进制,请使用十进制而不是整数

已经提供了一些智能LINQ答案,下面是我的扩展分步解决方案,它还允许忽略无效数字:

//Read input string
Console.Write("Input numbers separated by space: ");
string inputString = Console.ReadLine();
//Split by spaces
string[] splittedInput = inputString.Split(' ');
//Create a list to store all valid numbers
List<int> validNumbers = new List<int>();
//Iterate all splitted parts
foreach (string input in splittedInput)
{
    //Try to parse the splitted part
    if (int.TryParse(input, out int number) == true)
    {
        //Add the valid number
        validNumbers.Add(number);
    }
}
//Print all valid numbers
Console.WriteLine(string.Join(", ", validNumbers));
//读取输入字符串
Console.Write(“输入数字,空格分隔:”);
string inputString=Console.ReadLine();
//按空格分割
string[]splittedInput=inputString.Split(“”);
//创建一个列表来存储所有有效的数字
List validNumber=新列表();
//迭代所有分割的部分
foreach(splittedInput中的字符串输入)
{
//尝试分析分割的部分
if(int.TryParse(输入,输出整数)==true)
{
//添加有效的数字
有效编号。添加(编号);
}
}
//打印所有有效数字
Console.WriteLine(string.Join(“,”,validNumber));

您已经发现使用Split(data.Split())获取字符串数组。接下来,使用int.TryParse尝试将每个数组成员转换为整数。放弃您无法分析的内容。如果用户输入了
12342香蕉45
?TryParse方法已经覆盖了它,该方法将选择null(如果为false)和where条件。@LukaszBalazy,它后来被编辑为使用TryParse。FWIW,从一开始就应该是TryParse,修剪是不必要的步骤。@CetinBasoz,不应该。OP没有指定他期望的输入无效。。。他只是想从stringDo得到数字,你真的需要OP来指定当OP说输入是带有ReadLine的时候。这是自然应该期待的,不是吗?