2017-03-23 35 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