2017-03-23 50 views
1

因此,我一直在尝试将很多像这样的字符列表[20,8,25,5,34,12]转换为整数列表。目前,我正在做这个 方式:将Char列表转换为整数列表C#

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 34 5 12,它实际上出来像2 0 8 2 5 5 3 4 1 2

+2

如果这是你为什么不使用JSON库读回,因为它的目的是要一个JSON文本是? – Steve

+4

那么你遍历字符串'“[20,8,25,5,34,12]”'。所以它会按字符处理。 –

+0

如何剥离第一个和最后一个字符,然后将剩余的字符串拆分为逗号“,”?然后遍历字符串数组并将它们解析为整数。 (或者使用LINQ代替循环,但这是我要采用的基本方法。) – Serlite

回答

1

鉴于你的样品清单:

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

最简单的方法是去掉括号后打破string分开,并使用其ToList()功能从string.Split()投下array

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

注:JSON相关答案是 “正确” 的方式。这是更快捷的“任何字符串列表将会”的方式。

+0

我知道这不是解决问题的最佳方法,但它确实有帮助,现在可以使用。谢谢 –

0

你选择每个个性与

List<char> temp = input.Where(c => char.IsDigit(c)).ToList(); 

你应该使用逗号在数组中单独使用类似如下的数字:

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

所以去掉括号,处裂开了逗号阵列,这给你的个人JSON数组元素。

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

4

如果字符串是在你指定的格式(例如, “[20,8,25,5,34,12]”),可以简单地使用JsonConvert从Newtonsoft.Json包:

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

这是假设你想要一个整数列表,如你的问题所述。如果您希望的数字字符串列表,使用

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

代替

+0

这个答案最初有一个Unity3d标签,但不幸被编辑了;我建议你使用[JsonUtility](https://docs.unity3d.com/ScriptReference/JsonUtility.html)而不是牛顿的库。尽管他的自由能够很好,但它并不能很好地与Unity结合在一起,并且团结已经有了很好的支持。 – Maakep

+0

好点,我没有看到那个标签。 –

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

相关问题