【问题标题】:When using .Split to populate a string array, I only get one entry. I need two使用 .Split 填充字符串数组时,我只得到一个条目。我需要两个
【发布时间】: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,这确实是一个空格字符...

标签: c# arrays split


【解决方案1】:

感谢大家帮我调试这个!

事实证明,消息字符串正在另一个脚本中更新。该更新干扰了 .Split 的执行。我可以通过将 .Split 移动到脚本的不同区域来解决这个问题。

【讨论】:

  • 您可以将自己的答案标记为正确答案,以便其他人看到您的问题已得到解决:)
  • 我会 :) 因为我是 Stack Overflow 新手,所以我要等几天 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多