我刚开始学习C#,现在我正在尝试使用File IO。我在将 tab (\t
)字符写入文件时遇到了一些问题。
到目前为止,这是我的代码:
static void Main(string[] args)
{
string[] input = Console.ReadLine().Split(' ');
Console.WriteLine(string.Join("\n", input));
File.WriteAllLines(@"C:\Users\Shashank\Desktop\test.txt", input);
Console.ReadKey();
}
当我运行脚本并输入此文本时:
hello \twhat \tis \tyour name
以下内容将写入我的文件:
hello
\twhat
\tis
\tyour
name
但是,我希望文件输出看起来像:
hello
what
is
your
name
我已经在线查看过,但找不到能给我预期结果的解决方案。我也尝试使用StreamWriter
,但无济于事。
答案 0 :(得分:8)
"\t"
才是tab的表示。当它只是输入字符串时 - 没有任何东西以任何特殊的方式解释两个字符\
和t
(对于所有其他转义序列都是如此)。
您可以使用String.Replace
自行替换它们string[] input = Console.ReadLine().Replace(@"\t", "\t").Split(' ')
答案 1 :(得分:3)
实际上有一种在.NET中取消字符串的方法,尽管可能不是你期望的那样:
Console.WriteLine(Regex.Unescape(@"\tHello\nWorld"));
将导致(取决于您的标签缩进设置):
Hello
World
因此,如果您想要取消输入字符串然后将其拆分为单独的字符串(行)以进行输出,您可以执行以下操作:
string[] input = Regex.Unescape( Console.ReadLine() ).Split(' ');
Console.WriteLine(string.Join("\n", input));
File.WriteAllLines(@"C:\Users\Shashank\Desktop\test.txt", input);
Console.ReadKey();
或者,您可以首先拆分然后使用Linq进行unescape:
string[] input = Console.ReadLine().Split(' ').Select(Regex.Unescape).ToArray();
Console.WriteLine(string.Join("\n", input));
File.WriteAllLines(@"C:\Users\Shashank\Desktop\test.txt", input);
Console.ReadKey();
如果您打算将空格序列视为单个分隔符,请使用:
input.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
答案 2 :(得分:2)
问题似乎是控制台正在为你逃脱,也就是说,输入看起来像" hello \ twhat \ tis \ tyour name"。可以通过替换" \ t"来解决。用" \ t"使用string.Replace()。
string[] input = Console.ReadLine().Split(' ');
string text = string.Join("\n", input).Replace("\\t", "\t");
Console.WriteLine(text);
File.WriteAllText(@"D:\test.txt", text);
Console.ReadKey();
您可能希望使用Environment.NewLine而不是" \ n"。