【发布时间】:2016-12-15 17:15:29
【问题描述】:
早上好 Stack Mind!
我正在 Unity3d 中使用 C#。
我正在从 USGS rss atom 提要中提取一个字符串,其中包含我需要的 Lat/Lon 坐标。获得字符串后,我将其在“”处断开,并使用 string.Split 将两个条目放入一个数组中。在脚本的早期,我声明了数组并像这样填充它:
string[] shakeup = { "one", "two", "three" };
我已经确认这可以正常工作,我可以按预期检索这些条目。
但是,一旦我从提要中提取字符串并将其分解,我就会得到一个 IndexOutOfRangeException: Array index is out of range。当我尝试将新字符串从数组中拉出以将它们转换为浮点数时出错。
我从提要中提取的字符串如下所示:
33.2903333 -115.695
我用来把这个字符串分成两部分并用它来填充数组的代码是这样的:
void SplitIt()
{
//Read line, and split it by whitespace into an array of strings
char delimiter = ' ';
shakeup = Message.Split(' ');
Debug.Log(shakeup[0]);
Debug.Log("length is:" + shakeup.Length);
Debug.Log(shakeup[1]);
第二个 Debug.Log (shakeup.Length) 返回 1。 第三个 Debug.Log 是我尝试读回数组中第二个条目的地方,这就是我收到错误消息的地方。
欢迎任何帮助或建议。我已经在 StackOverflow 和 UnityAnswers 论坛上进行了谷歌搜索和搜索,但无法解开这个确切的问题。
我确实考虑过使用列表,但由于数组只有两个坐标,这似乎是一个更简单的解决方案,开销略小(当然,直到我花了 12 个小时尝试调试它)。
编辑: 这可能是我得到的字符串的问题。它作为字符串传递就好了,我可以将它打印到控制台,Unity 将它视为任何其他字符串。我从这里拉出来:
https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.atom 34.2495 -118.5568333
第二点,字符串的第一部分进入数组就好了。如果我调用条目“shakeup [0]”,我会按预期得到“34.2495”。这是被吃掉的字符串的第二部分。
【问题讨论】:
-
"shakeup.Length 返回 1" 那是因为只有一项,而不是
1是数组的最高索引。您可能正在拆分一个没有空格的字符串 -
似乎是制表符分隔
.Split('\t') -
请注意,如果您不确定分隔符是什么,那么
Message.Split(null);将在 any 空白处拆分。 -
检查消息数据 .ToCharArray() 并查看分隔符到底是什么。最可能的解释是,它们并没有被你瘦它们分开。
Split()不太可能破产 -
似乎从坐标(
georss:point标签之间)拉出的字符的值是 32,这确实是一个空格字符...