C# 将字符串中的数字放入整数数组

C# 将字符串中的数字放入整数数组,c#,C#,我有像“237853494314831”这样的数字行(字符串类型)。我需要把它们放到int数组中。下面是我编写的蹩脚代码,但它不能正常工作: int currentArrayValue=0; int currentChar=0; for (int i = 0; i < text1.Length; i++) { if (text1[i] != ' ') {

我有像“237853494314831”这样的数字行(字符串类型)。我需要把它们放到int数组中。下面是我编写的蹩脚代码,但它不能正常工作:

        int currentArrayValue=0;
        int currentChar=0;

        for (int i = 0; i < text1.Length; i++)
        {
            if (text1[i] != ' ')
            {
                currentChar++;
                continue;
            }

            else
            {
                for (int k = 1; k <=currentChar; k++)
                {
                    if (k == 1) Array[currentArrayValue] = text1[i - currentChar];
                    else if (k == 2) Array[currentArrayValue] = text1[i - currentChar] * 10;
                    else if (k == 3) Array[currentArrayValue] = text1[i - currentChar] * 100;
                }
                currentArrayValue++;
            }
        }
int currentArrayValue=0;
int currentChar=0;
for(int i=0;i对于(int k=1;k使用
string.Split
代替。您可以在每个空格上拆分并获得一个数组。从那里,将每个项解析为int。实际上,您可以使用LINQ在一行中完成所有操作

int[] myInts = text1.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => int.Parse(s)).ToArray(); 
string input=“2378 53 4 94 32 148 31”;
var arr=Regex.Matches(输入@“\d+”).Cast()。选择(m=>int.Parse(m.Value)).ToArray();

因此,如果您有一个字符串,并且所有数字都用空格分隔

string foo = "12 34 567 120 12";
您所要做的就是使用
string.Split(“”)
将该字符串拆分为一个数组,然后将这些值转换为int值

int[] intArray = foo.Split(' ').Select(x => Convert.ToInt32(x)).ToArray();
非Linq答案

const string inputVal = "23 78 53 4 94 32 148 31";
string[] splitInput = inputVal.Split(' ');
int[] inputIntArray = new int[splitInput.Length];
int counter = 0;
foreach (string split in splitInput){
    inputIntArray[counter++] = int.Parse(split);
}

正如其他答案所指出的,有几种方法可以实现你想要的。如果你想进行一些安全检查,那么我会使用
TryParse

using System;
using System.Collections.Generic;               
using System.Linq;

public class Program
{
    public static void Main()
    {
        var test = "1 2 3 x";
        var values = test.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries);
        var results = new List<int>();
        foreach(var value in values)
        {
            int x;
            if(Int32.TryParse(value, out x))
            {
               results.Add(x);
            }
            else
            { 
                Console.WriteLine("{0} is not an integer", value);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共课程
{
公共静态void Main()
{
var test=“1 2 3 x”;
var values=test.Split(新[]{''},StringSplitOptions.RemoveEmptyEntries);
var results=新列表();
foreach(值中的var值)
{
int x;
if(Int32.TryParse(值,out x))
{
结果:添加(x);
}
其他的
{ 
WriteLine(“{0}不是整数”,值);
}
}
}
}

它不能正常工作
不是对问题的有用描述。你希望得到什么?你得到了什么?你得到了什么?你得到了错误/异常吗?如果是,它是什么?发生在哪里?寻求调试帮助的问题(“此代码为什么不能工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。您是否可以只按空格拆分然后
Convert.ToInt32()
在每一个上。你可以使用一个列表,也可以只分配一个新的长度数组,
splitStringArray.length
StringSplitOptions.RemoveEmptyEntries
,以增加安全性。@DonBoitnott很好的调用。Downvoter,我想你会给出原因…使用正则表达式来实现它。Split的目的有点“过火”。但这并不意味着它错了。这只是另一种选择。。也可以像@venerik posted那样轻松处理案件……你是对的,但我觉得当回答初学者提出的问题时,提供最简单的答案是最好的选择。@JonathanCarroll然后人们不需要向上投票,但向下投票是……。为了安全,
Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries)
-如果有额外的空格,仍然有效。
using System;
using System.Collections.Generic;               
using System.Linq;

public class Program
{
    public static void Main()
    {
        var test = "1 2 3 x";
        var values = test.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries);
        var results = new List<int>();
        foreach(var value in values)
        {
            int x;
            if(Int32.TryParse(value, out x))
            {
               results.Add(x);
            }
            else
            { 
                Console.WriteLine("{0} is not an integer", value);
            }
        }
    }
}