2011-01-29 74 views
0

我從遊戲解析聊天和我得到這個字符串「榨68 00 00 37 00 45 00 00」C#中出現FormatException了未處理

recipe = recipe.Replace("搾", ""); 
string[] rElements = new string[8]; 
rElements = recipe.Split(' '); 
int num = int.Parse(rElements[0]); 

我得到的最後一行的格式不同的是我不不明白。它表示輸入字符串格式不正確。我已經檢查過調試器,第一個元素表示它是「68」。任何人都有任何線索發生了什麼?

+1

按預期工作,也許你的輸入字符串是錯誤的 – 2011-01-29 03:14:22

+0

什麼是輸入字符串?你必須提供。 – humblelistener 2011-01-29 03:16:22

回答

2

由於提供了字符串搾68 00 00 37 00 45 00 00,您的代碼按預期執行。 num是68.我建議你的輸入字符串和數組的第一個元素不是你認爲的那樣。在嘗試解析之前嘗試打印出來。

0

我假設你只是複製/粘貼你的輸入字符串/代碼,所以我認爲你正在處理的問題是你的輸入字符串的編碼。在我的屏幕上,我看到你的第一個字符是中文字符zhà,意思是壓迫或提取。因此,儘管您的示例輸入字符串和代碼有效,但可能隨後的輸入字符串包含不同於您的示例輸入字符串中的Unicode字符的Unicode字符?

嘗試使用REGEX刪除不需要的數字?

using System.Text.RegularExpressions; 
... 
recipe = Regex.Replace(recipe, @"[^0-9\s]", string.Empty); 
string[] rElements = recipe.Split(' '); 
int num = int.Parse(rElements[0]); 
1

正如已經指出,鑑於提供的,你的代碼將設置NUM至68這裏有幾個指針字符串:

如果你只是想刪除的第一個字符,不需要匹配它,你可以使用:

recipe = recipe.Substring(1); 

拆分方法將創建一個新的數組與8個元素,因此沒有理由用一個數組初始化rElements。相反,你可以使用:

var rElements = recipe.Split(' '); 

如果你需要的所有rElements數組中的字符串項的轉換成整數,你可以這樣做:

var numArray = rElements.Select(e => int.Parse(e)).ToArray(); 

當然,如果你需要檢查每一個,您可以使用TryParse或try/catch的循環。全部放在一起,你會得到:

var recipe = "搾68 00 00 37 00 45 00 00"; 
recipe = recipe.Substring(1); 
var rElements = recipe.Split(' '); 
var numArray = rElements.Select(e => int.Parse(e)).ToArray();