c#FormatException未处理

时间:2011-01-29 03:05:28

标签: c# formatexception

我正在解析游戏中的聊天,我收到这个字符串“榨68 00 00 37 00 45 00 00”

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

我在最后一行得到格式异常,我不明白。它表示输入字符串的格式不正确。我检查了调试器,第一个元素表示它是“68”。任何人都知道发生了什么事?

3 个答案:

答案 0 :(得分:2)

根据提供的字符串搾68 00 00 37 00 45 00 00,您的代码按预期执行。 num是68.我建议您的输入字符串和数组的第一个元素不是您认为的那样。在尝试解析之前尝试打印出来。

答案 1 :(得分:1)

如前所述,给定提供的字符串,您的代码将num设置为68.以下是一些指示:

如果您只想删除第一个字符而不需要匹配它,可以使用:

recipe = recipe.Substring(1);

Split方法将创建一个包含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();

答案 2 :(得分:0)

我假设您只是复制/粘贴了输入字符串/代码,所以我认为您正在处理的问题是输入字符串的编码。在我的屏幕上,我看到你的第一个角色是中文字符zhà,这意味着压迫或提取。因此,尽管您的示例输入字符串和代码有效,但是后续输入字符串可能包含不同的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]);