解析控制台应用程序中粘贴的文本

本文关键字:文本 控制台 应用程序 | 更新日期: 2023-09-27 18:16:27

我有一个用c#制作的控制台应用程序

允许用户粘贴如下文本

aaaaa
bbbbb
ccccc

我知道console.readline()不会接受它,所以我使用了console.in.readtoend()

            string input = Console.In.ReadToEnd(); 
            List<string> inputlist = input.Split(''n').ToList(); 

我需要它逐行解析输入文本上面的代码可以工作,但是在粘贴之后,为了继续,用户必须按一次enter,然后按ctrl+z,然后再按enter。

我想知道是否有更好的方法来做这件事有些东西只需要按一次回车键

有什么建议吗?

谢谢

解析控制台应用程序中粘贴的文本

在控制台中,如果你粘贴了一个行块,它们不会立即执行。如果你粘贴

aaaa
bbbb
cccc

什么也不会发生。一旦你按下enter键,Read方法就开始做它的工作。ReadLine()在每个新行之后返回。所以我总是这样做,在我看来这是最简单的方法:

var lines = new List<string>();
string? line;
while ((line = Console.ReadLine()) != null)
{
    // Either you do here something with each line separately or
    lines.Add(line);
}
// You do something with all of the lines 

我现在明白为什么这个问题很难了。这对你有用吗?

Console.WriteLine("Ctrl+c to end input");
StringBuilder s = new StringBuilder();
Console.CancelKeyPress += delegate
{
    // Eat this event so the program doesn't end
};
int c = Console.Read();
while (c != -1)
{
    s.Append((char)c);
    c = Console.Read();
}
string[] results = s.ToString().Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

你不需要做任何额外的事情。

请按ReadLine读取,然后按回车键。
string line1 = Console.ReadLine(); //aaaaa
string line2 = Console.ReadLine(); //bbbbb
string line3 = Console.ReadLine(); //ccccc

我能够通过下面的代码解决您的问题。你只需要在粘贴完所有文本后按回车键。

    Console.WriteLine("enter line");
    String s;
    StringBuilder sb = new StringBuilder();
    do
    {
        s = Console.ReadLine();
        sb.Append(s).Append("'r'n");
    } while (s != "");
    Console.WriteLine(sb);