【问题标题】:String.Split() Function mysteriously ignoring duplicatesString.Split() 函数神秘地忽略重复项
【发布时间】:2016-01-10 23:13:08
【问题描述】:

在 Unity3D 中,我正在读取包含节点及其连接信息的文本文件。

但是,似乎所有重复项都会自动删除!

           for (int j = 0; j < tokens.Length; j++)
           {
               Debug.Log(tokens[j]);
           } }

控制台中的结果:

Node,Node2,Node2,Lamp,Lamp,Node1,Node3,Node4   // string text
Node
Node2
Lamp
Node1
Node3
Node4

因此,在遍历数组时,它似乎跳过了重复项。

【问题讨论】:

  • 刚刚测试过,它不会删除重复项。你能分享你的框架版本吗?
  • 拆分功能不会自动删除重复项。你能提供一个可重现的例子吗?
  • 什么是$string?请改用string
  • 你肯定在别处搞砸了,给我们你的整个方法以及完整的输入文件,在某些情况下,除了空条目之外,split 不会删除任何东西,当然不是单词。
  • Joe Blow 的回答对您有帮助吗?在这种情况下,将其标记为答案!

标签: c# unity3d split


【解决方案1】:

这是Unity中臭名昭著的gotchya

非常简单,在 Unity 控制台中:

不会打印副本!!!

通过控制台输出更仔细地查看,有一个 Collapse 切换,可以显示或不显示重复项。

就这么简单。

【讨论】:

  • 已经想到我会得到这个答案,因为我确实阅读了清楚表明 split() 不会删除重复项的文档。我用更多信息和测试结果编辑了问题。
【解决方案2】:

即使 split 不应该删除重复项(已测试 here),您也可以尝试使用 Regex 和 Linq。

var words = Regex.Matches("Node,Node2,Node2,Lamp,Lamp,Node1,Node3,Node4", @",?(\w+)").Cast<Match>().Select(x => x.Groups[1].Value);

【讨论】:

  • 如果拆分不起作用,那么问题显然在于 OP 没有向我们展示的代码。这是非常基本的字符串处理,不需要用正则表达式替换。
猜你喜欢
  • 2020-09-27
  • 2018-05-15
  • 1970-01-01
  • 2014-06-14
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多