我有一个全局字符串变量 - “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,因此两个变量不相等。有什么建议吗?
答案 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);
答案 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)];
}