将Char列表转换为int的列表C#

时间:2017-03-23 15:27:23

标签: c#

所以我一直在努力将像这个[20,8,25,5,34,12]这样的字符列表转换成一个刚出的列表。我现在正在这样做 方式:

string fromJson = File.ReadAllText(Application.dataPath + "/JsonSaveTest.json");
List<int> temp = GetNumbers(fromJson).Select(c => int.Parse(c)).ToList();

然后

private List<string> GetNumbers(string input)
{
    List<char> temp = input.Where(c => char.IsDigit(c)).ToList();
    var toReturn = temp.Select(c => c.ToString()).ToList();      
    return toReturn;

}

但是它自己将每个数字分开,比如结果列表应该是20 8 25 5 34 12,它实际上就像2 0 8 2 5 5 3 4 1 2。

4 个答案:

答案 0 :(得分:4)

如果字符串是您指定的格式(例如“[20,8,25,5,34,12]”),您只需使用Newtonsoft.Json包中的JsonConvert:

var result = JsonConvert.DeserializeObject<List<int>>("[20,8,25,5,34,12]");

这假设您需要一个整数列表,如问题中所述。如果您想要一个数字字符串列表,请使用

var result = JsonConvert.DeserializeObject<List<string>>("[20,8,25,5,34,12]");

代替

答案 1 :(得分:1)

鉴于您的样本清单:

"[20,8,25,5,34,12]"

最简单的方法是在删除括号后将string分开,然后使用array功能从string.Split()转换ToList()

private List<string> GetNumbers(string input)
{
  string x = input.Replace("[", string.Empty).Replace("]",string.Empty); 
  return x.Split(',').ToList();
}

注意:与JSON相关的答案是&#34;正确的&#34;办法。这更快速和肮脏&#34;任何字符串列表都会做&#34;方式。

答案 2 :(得分:0)

您正在使用

选择每个角色
List<char> temp = input.Where(c => char.IsDigit(c)).ToList();

您应该使用数组中的逗号分隔数字,如下所示:

List<string> temp = input.Trim(new []{ '[', ']' }).Split(new []{ ',' }).ToList();

因此,删除括号,在逗号处拆分数组,这将为您提供单独的JSON数组元素。

请注意,使用库进行所有JSON解析可能是值得的,这是您应该考虑的事项。

答案 3 :(得分:0)

以下分割字符串,然后解析整数:

var input = "[20,8,25,5,34,12]";   

public static int[] ParseNumbersList(string input) {
    const char valueSeperator = ',';

    var removeBrackets = input.Substring(1, input.Length-2);
    var parts = removeBrackets.Split(valueSeperator);

    return parts.Select(p => int.Parse(p)).ToArray();
}

.Net Fiddle