C# /字斟句酌
所以,我正在制作一个“刽子手”游戏,用一个文字编辑器在游戏中输入你自己的文字。我有一个表单,它打开一个文本文件并在多行文本框中显示内容。之后,用户可以编辑文本框。如果按“保存”,文本框中的内容将保存到文本文件中 现在,无论是阅读还是写作,一切都很顺利。但是现在如果我想玩我的文字,它总是比我输入的文字长。通过调试,我发现我的程序在每个单词后面都添加了“/r”。例如,如果我在wordeditor中输入“Test”,游戏将使用它作为“Test/r”。 我认为这是wordeditor中的一个错误,因此下面是代码:C# /字斟句酌,c#,filestream,streamreader,streamwriter,C#,Filestream,Streamreader,Streamwriter,所以,我正在制作一个“刽子手”游戏,用一个文字编辑器在游戏中输入你自己的文字。我有一个表单,它打开一个文本文件并在多行文本框中显示内容。之后,用户可以编辑文本框。如果按“保存”,文本框中的内容将保存到文本文件中 现在,无论是阅读还是写作,一切都很顺利。但是现在如果我想玩我的文字,它总是比我输入的文字长。通过调试,我发现我的程序在每个单词后面都添加了“/r”。例如,如果我在wordeditor中输入“Test”,游戏将使用它作为“Test/r”。 我认为这是wordeditor中的一个错误,因此下
namespace Hangman
{
public partial class WordEditor : Form
{
public WordEditor()
{
InitializeComponent();
using (StreamReader sr = new StreamReader(new FileStream("C:\\Users\\tstadler\\Desktop\\Hangman.txt", FileMode.Open)))
{
string[] Lines = sr.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < Lines.Length; i++)
{
textBox1.Text += Lines[i] + Environment.NewLine;
}
}
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
string[] words = textBox1.Text.Split('\n');
FileStream overwrite = new FileStream("C:\\Users\\tstadler\\Desktop\\Hangman.txt", FileMode.Create);
using (StreamWriter file = new StreamWriter(overwrite))
{
for (int i = 0; i < words.Length; i++)
{
file.Write(words[i] + Environment.NewLine);
}
}
MessageBox.Show("Words saved. ");
}
名称空间刽子手
{
公共部分类WordEditor:Form
{
公共WordEditor()
{
初始化组件();
使用(StreamReader sr=new StreamReader(新文件流(“C:\\Users\\tstadler\\Desktop\\Hangman.txt”,FileMode.Open)))
{
string[]Lines=sr.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
对于(int i=0;i
有人能告诉我他是否认识到这个错误吗?
谢谢。无论您在哪里插入您使用的新行
环境。新行
-除了一行:
string[] words = textBox1.Text.Split('\n');
这将导致字符串被\n
拆分,而环境。在Windows系统上,换行符
由\r\n
组成。因此,拆分后\r
保留在字符串的末尾
要解决该问题,只需将上面提到的行替换为
string[] words = textBox1.Text.Split(new string[] { Environment.NewLine });
无论在何处插入使用的新行。新行-除了一行:
string[] words = textBox1.Text.Split('\n');
这将导致字符串被\n
拆分,而环境。在Windows系统上,换行符
由\r\n
组成。因此,拆分后\r
保留在字符串的末尾
要解决该问题,只需将上面提到的行替换为
string[] words = textBox1.Text.Split(new string[] { Environment.NewLine });
使用:
打开文本文件,读取文件的所有行,然后关闭文件:
行定义为一系列字符,后跟回车符\r
、换行符\n
,或紧跟换行符的回车符
以及:
创建新文件,将指定的字符串数组写入该文件,然后关闭该文件
样本:
string[] lines = File.ReadAllLines("filePath");
File.WriteAllLines("filePath", textBox.Text.Split(new[] {Environment.NewLine}));
使用:
打开文本文件,读取文件的所有行,然后关闭文件:
行定义为一系列字符,后跟回车符\r
、换行符\n
,或紧跟换行符的回车符
以及:
创建新文件,将指定的字符串数组写入该文件,然后关闭该文件
样本:
string[] lines = File.ReadAllLines("filePath");
File.WriteAllLines("filePath", textBox.Text.Split(new[] {Environment.NewLine}));
您的解决方案基本正确,但非常冗长请看以下内容: ) 及 ) 所以你的阅读部分应该是:
textBox1.Text = string.Join(Environment.NewLine,
File.ReadAllLines(filePath).Where(x=>!string.IsNullOrWhiteSpace(x)));
写
File.WriteAllText(filePath,textBox1.Text);
您的解决方案基本正确,但非常冗长请看以下内容: ) 及 ) 所以你的阅读部分应该是:
textBox1.Text = string.Join(Environment.NewLine,
File.ReadAllLines(filePath).Where(x=>!string.IsNullOrWhiteSpace(x)));
写
File.WriteAllText(filePath,textBox1.Text);
+Environment.NewLine;将添加a/rit代表回车+Environment.NewLine;将添加a/rit代表给出错误的回车。“string.Split(params char[])的最佳重载方法有一些无效参数。”@TimKatheteStadler抱歉,感谢您指出-我修复了这一点。这给出了一个错误。“用于'string.Split(params char[])的最佳重载方法有一些无效参数。”@timkhattestadler抱歉,感谢您指出这一点-我已经解决了。