C#StreamReader,在新线路上遇到麻烦

时间:2013-11-12 16:54:25

标签: c# streamreader

我有一个全局字符串变量 - “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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

没有过载只需要一个字符串。您可以调用someString.Split(Environment.NewLine.ToCharArray()),但还需要考虑其他问题。 假设我们有一个输入,字符串test =“test1 \ r \ n \ test2”。如果你调用test.Split('\ n'),结果数组将有两个元素:array [0]将是“test1 \ r \ n”而数组[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。因此,返回单词[ran.Next(0,words.Length - 1)]可以更改为返回单词[ran.Next(0,words.Length - 1)]。修剪()以消除\ r而不进行更改到你当前的分割代码。

答案 2 :(得分:0)

使用以下

之类的内容

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

CRLF parsing blues in C#

答案 3 :(得分: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)];
}