将 从用户输入写入文件
本文关键字:文件 输入 用户 | 更新日期: 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"