将string []转换为Int []而不会丢失前导零

时间:2017-03-31 13:39:25

标签: c#

输入:

string param = "1100,1110,0110,0001";

输出:

int[] matrix = new[]
    {
              1,1,0,0,
              1,1,1,0,
              0,1,1,0,
              0,0,0,1
    };

我做了什么?

首先,我将字符串拆分为字符串[]。

string[] resultantArray = param.Split(',');

创建了一个方法,我传递了我的字符串[]。

var intArray = toIntArray(resultantArray);

static private int[] toIntArray(string[] strArray)
{        
    int[] intArray = new int[strArray.Length];
    for (int i = 0; i < strArray.Length; i++)
    {
        intArray[i] = int.Parse(strArray[i]);
    }

    return intArray;
}

问题吗

我尝试了很多SO的解决方案,但没有一个能帮助我。

使用不带前导零的数组结束。

5 个答案:

答案 0 :(得分:19)

  • 确定所有数字:.Where(char.IsDigit)
  • 将选定的char - 数字转换为integer.Select(x => x-'0')(这不如int.ParseConvert.ToInt32那么漂亮,但它超级快)

代码:

string param = "1100,1110,0110,0001";
int[] result = param.Where(char.IsDigit).Select(x => x-'0').ToArray();

正如CodesInChaos评论的那样,如果您的输入中有other种类型的数字,则可能会导致错误,例如泰国数字字符:&#39; 0&#39; &#39; 1&#39; &#39; 2&#39; &#39; 3&#39; &#39; 4&#39; &#39; 5&#39; &#39; 6&#39; &#39; 7&#39; &#39; 8&#39; &#39; 9&#39;其中char.IsDigit == true - 如果您需要处理此类特殊情况,您只能在结果0

中仅允许1.Where("01".Contains)

答案 1 :(得分:5)

你也可以使用Linq删除逗号并按字符顺序转换结果。

string param = "1100,1110,0110,0001";
int[] result = param.Replace(",", "").Select(c => (int)Char.GetNumericValue(c)).ToArray();

答案 2 :(得分:3)

另一种方法

static private IEnumerable<int> toIntArray(string[] strArray)
{
    foreach (string str in strArray)
    {
        foreach (char c in str)
        {
            yield return (int)char.GetNumericValue(c);
        }
    }
}

答案 3 :(得分:2)

这个怎么样?

        string input = "1100,1110,0110,0001";

        var result = input
            .Split(',')
            .Select(e => e.ToCharArray()
                .Select(f => int.Parse(f.ToString())).ToArray())
            .ToArray();

答案 4 :(得分:1)

string[] s=param.split(',');
Char[] c;
foreach(string i in s){
 c+=i.ToCharArray()
}
int[] myintarray;
int j=0;
foreach(char i in c){
myintarray[j]=(int)i;
j++
}