我正在使用StringBuilder
来格式化我的字符串值,如下所示
学生人数:3602
注册时间:2018年9月11日上午12:00:00
注册人数:0
但是当我使用以下代码将其写入文本文件时
using (StreamWriter sw = new StreamWriter(@"LocaltempPath\Sheet.txt"))
{
sw.WriteLine(sb.ToString());
}
我错过了整个格式,而不是上面显示的格式,而是将值复制到了一行文本文件中!写入文本文件时如何保留格式?
更新:我的StringBuilder代码
StringBuilder sb = new StringBuilder("Student Number: " + StId);
sb.Append("\n");
sb.Append("Registered On: " + regdate);
sb.Append("\n");
sb.Append("Enrollment No: " + regnumber);
sb.Append("\n");
答案 0 :(得分:1)
使用sb.AppendLine而不是sb.Append将文本添加到单独的行。 另外,如果要写入文件并需要下一行,请使用Environment.NewLine而不是\ n。
答案 1 :(得分:0)
根据评论,除非您正在为unix系统准备数据,否则请勿使用硬编码的“ \ n”表示换行符。
执行此操作:
StringBuilder sb = new StringBuilder("Student Number: " + StId);
sb.AppendLine();
sb.AppendLine("Registered On: " + regdate);
sb.AppendLine("Enrollment No: " + regnumber);
AppendLine()可以不带任何参数而用于添加换行符,而我在上面这样做是为了在创建stringbuilder的字符串的末尾添加新行。也可以这样做:
StringBuilder sb = new StringBuilder();
sb.AppendLine("Student Number: " + StId);
sb.AppendLine("Registered On: " + regdate);
sb.AppendLine("Enrollment No: " + regnumber);
如果您想进一步控制日期等格式:
StringBuilder sb = new StringBuilder();
sb.AppendLine("Student Number: " + StId);
sb.AppendFormat("Registered On: {0:yyyy-MM-dd HH:mm:ss.fff}\r\n", regdate);
sb.AppendLine("Enrollment No: " + regnumber);
最后,在stringbuilder上对AppendXXX()的每次调用都会返回相同的stringbuilder,因此您可以像这样调用并保存一些输入内容:
StringBuilder sb = new StringBuilder();
sb.Append("Student Number: ").AppendLine(StId)
.Append("Registered On: ").AppendLine(regdate);
.Append("Enrollment No: ").AppendLine(regnumber);
确实,您应该避免将字符串连接与+和stringbuilder混合使用-如果您仅使用stringbuilder进行大量的字符串构建,这样做会更加有效。但这可能不会使您的代码更具可读性
就可读代码而言,您可能还想知道您可以执行以下操作:
StringBuilder sb = new StringBuilder();
sb.AppendLine($"Student Number: {StId}");
sb.AppendLine($"Registered On: {regdate}");
sb.AppendLine($"Enrollment No: {regnumber}");
在这个简单的示例中,它并没有多大帮助,但对于连接很多东西的字符串确实可以起到帮助:
$"Student Number: {StId}, Registered On: {regdate}, Enrollment No: {regnumber}"
//instead of
"Student Number: " + StId + ", Registered On: " + regdate + ", Enrollment No: " + regnumber
答案 2 :(得分:0)
不同的操作系统(Unix,Windows,Mac)使用不同的换行符(Why?)。
您正在显式使用\n
,这是Linux的默认设置,但是Windows上的处理方式取决于您用来查看文件的编辑器(记事本将所有文本显示为一长行)。要将系统默认字符用于换行符,请使用sb.AppendLine()
或Environment.NewLine
而不是\n
。