将 从用户输入写入文件

本文关键字:文件 输入 用户 | 更新日期: 2023-09-27 18:04:05

我刚刚开始学习c#,现在我正在尝试使用File IO。我在向文件写入选项卡 ('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,但无济于事。

将	从用户输入写入文件

"'t"仅在字符串文字中使用时是制表符的表示。当它只是一个输入字符串时,没有任何东西以任何特殊的方式解释't这两个字符(与所有其他转义序列相同)。

你可以自己用String替换它们。替换:

string[] input = Console.ReadLine().Replace(@"'t", "'t").Split(' ')

实际上在。net中有一种不转义字符串的方法,尽管可能不是在您期望的地方:

Regex.Unescape(字符串)

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):

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)

问题似乎是控制台正在为您转义't,也就是说,输入看起来像"hello 'twhat 'tis 'tyour name"。可以通过使用string.Replace()将"'t"替换为"'t"来解决。

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。用换行符代替"'n"