0

我正在从游戏中解析聊天,我得到这个字符串“榨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”。有人知道发生了什么吗?

4

3 回答 3

2

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

于 2011-01-29T03:12:42.910 回答
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();
于 2011-01-29T07:18:24.697 回答
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]);
于 2011-01-29T07:05:52.233 回答