2011-01-29 99 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(); 
相关问题