0

我有一个全局字符串变量 - “word”。

    string word = "";
    List<Label> labels = new List<Label>();
    int amount = 0;

然后通过解析文本文档(新行分隔)在以下两个函数中定义/分配该单词

    void MakeLabels()
    {
        word = GetRandomWord();
        char[] chars = word.ToCharArray();
        ...
    }


    string GetRandomWord()
    {

        System.IO.StreamReader myFile = new System.IO.StreamReader(...);
        string myString = myFile.ReadToEnd();
        string[] words = myString.Split('\n');
        Random ran = new Random();
        return words[ran.Next(0, words.Length - 1)];
    }

最后,一个根据“word”变量验证文本框内容的事件。

    private void button2_Click(object sender, EventArgs e)
    {
        if (textBox2.Text == word)
        {
            MessageBox.Show(...);
        }
        else
        {
            MessageBox.Show(...);
            textBox2.Text = "";
            textBox1.Focus();
            Reset();
        }

我遇到的问题是,即使 textBox2 相当于“word”,我也会收到与 else 语句相关的 MessageBox。我认为这与“\n”中携带的“word”变量有关;这意味着 textBox2.Text = apple 和 word = apple\n,因此这两个变量不等价。有什么建议么?

4

4 回答 4

0

1) windows 环境中的换行符是\r\n,而不是\n。在 \n 上拆分是不够的。
2) 与建议相反,您不能简单地调用 someString.Split(Environment.NewLine)。

没有只需要一个字符串的重载。您可以调用 someString.Split(Environment.NewLine.ToCharArray()) 但您需要考虑其他问题。假设我们有一个输入,字符串 test = "test1\r\ntest2"。如果调用 test.Split('\n'),结果数组将有两个元素:array[0] 将是“test1\r”,array[1] 将是“test2”...

但是如果你调用 test.Split(Environment.NewLine.ToCharArray()) 那么你会得到一个包含三个元素的数组:array[0] 将是“test1”,array[1] 将是“”,array[2 ] 将是“test2”... 编辑添加:您可以通过调用 test.Split(new string[] { Environment.NewLine }, StringSplitOptions.None) 来解决这个问题。

3) 正如一个人所建议的,调用 string.Trim() 将删除 \r。因此, return words[ran.Next(0, words.Length - 1)] 可以更改为 return words[ran.Next(0, words.Length - 1)].Trim() 以消除 \r 而无需进行更改到您当前的拆分代码。

于 2013-11-12T17:22:55.263 回答
0

如果您确定您的问题是字符串末尾的换行符,您应该查看String.Trim()方法。

于 2013-11-12T16:59:52.183 回答
0

使用类似下面的东西

string[] parseStr = myTest.Split(new string[]{Environment.NewLine},StringSplitOptions.None);

CRLF 在 C# 中解析蓝调

于 2013-11-12T17:32:12.733 回答
0
 string GetRandomWord()
  {

    string[] linse=  System .IO.File .ReadAllLines (......) ;
      string mlines = "";
        foreach (string line in linse)
          {
             if (line.Trim() != "")
                if(mlines=="")
                    mlines = line;
                else 
                mlines = mlines +"\n"+ line;
          }
        string[] words = mlines. Split('\n');

 Random ran = new Random();
    return words[ran.Next(0, words.Length - 1)];
}
于 2013-11-12T18:03:57.023 回答