【问题标题】:Comparing strings that are split from .txt file not working Unity C#比较从 .txt 文件中拆分出来的字符串不起作用 Unity C#
【发布时间】:2016-12-13 13:31:52
【问题描述】:

我正在尝试为我们的游戏编写对话系统,但遇到了一个非常简单但令人讨厌的问题。我将文本行从 .txt 文件拆分为字符串数组。字符串本身可以完美运行,但比较它们并不能正常工作。

下面的代码是我目前正在做的简化版。它显示了我用来剪切字符串的语法以及我如何比较它们。就是对文本进行拆分,回车获取下一个文本,遇到特定文本(本例为“-”)自动运行一段代码。

所以问题是,Split 函数是向字符串添加了一些东西还是必须以不同的方式进行比较?

private string[]  _textLines;
private TextAsset _textFile;
private int       _currentLine;

private void PrepareText()
    {
        _textFile = _textLoader.GetTextAsset();

        _textLines = (_textFile.text.Split('\n'));

private void update() {

    if (Input.GetButtonDown("Continue"))
        _currentLine += 1;

    if (_textLines[_currentLine].Equals("-"))                            
        DisableTextBox();
}

当我记录指定数组槽的内容时,它只给了我应该的“-”,但代码仍然认为它不相等。

我用于此测试的 .txt 文件如下所示。我只想在遇到第 4 行时运行代码。

This is the first line
second line
third line, break coming
-
More dialog here
-

【问题讨论】:

  • 您确定没有任何不可见的字符,例如剩余的\r?存储在数组中的字符串的长度是多少?您可以通过使用 StringReader 或 StreamReader 和 ReadLine 来避免这种情况
  • 文件可能被\r\n组合分割。然后你会得到像-\r 这样的行,当然,它不等于-。 BTW:我宁愿推荐使用函数File.ReadAllLines(见msdn.microsoft.com/cs-cz/library/…
  • “代码不认为它是平等的” - 你还没有证明(或证明)这一点。你能把问题缩小到一个简单的example 我们可以试试吗?可能DisableTextBox()有问题?
  • 尝试将其转换为 ASCII,看看它是否给你 45(- 符号) Encoding.ASCII.GetBytes(value);
  • Environment.NewLine代替\n

标签: c# string unity5


【解决方案1】:

我建议您查看该讨论:Split text with '\r\n'

使用 '\n' 拆分不会“拆分”\r,因此您数组中的所有值的末尾都有“\r”。

在我刚才提到的帖子中,您有不同的解决方案。

【讨论】:

    【解决方案2】:

    感谢您的快速提示!就像 cmets 中建议的那样,使用以下代码会在字符串中添加一个不可见字符。

    _textFile.text.Split('\n')
    

    我没有像 cmets 中建议的那样学习使用 StringReader 之类的新东西(因为我是那样的笨蛋),而是通过将 string.Equals() 的比较更改为 string.Contains() 和它完美地工作(除了在我的情况下没有真正做任何事情的隐形角色)

    private string[]  _textLines;
    private TextAsset _textFile;
    private int       _currentLine;
    
    private void PrepareText()
        {
            _textFile = _textLoader.GetTextAsset();
    
            _textLines = (_textFile.text.Split('\n'));
    
    private void update() {
    
        if (Input.GetButtonDown("Continue"))
            _currentLine += 1;
    
        if (_textLines[_currentLine].Contains("(end)"))                           
            DisableTextBox();
    }
    

    对于我的示例 .txt 文件,必要的更改自然如下所示:

    This is the first line
    second line
    third line, break coming
    (end)
    More dialog here
    (end)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多