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

parsing pasted text in console application

我有一个用 C# 编写的控制台应用程序

它允许用户粘贴一些文本如下

aaaaa
bbbbb
ccccc

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

            string input = Console.In.ReadToEnd(); 

            List<string> inputlist = input.Split('\n').ToList(); 

我需要它逐行解析输入文本 上面的代码有效,但是粘贴后,为了继续,用户必须按一次回车,然后按 ctrl+z 然后再次按回车。

我想知道是否有更好的方法 需要按回车键一次的东西

有什么建议吗?

感谢

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

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

在控制台中,如果您粘贴一行代码,它们不会立即执行。也就是说,如果您粘贴

aaaa
bbbb
cccc

没有任何反应。一旦您按下回车键,Read 方法就会开始执行它的工作。和 ReadLine() returns 在每一个新行之后。所以我一直这样做的方式,IMO 这是最简单的方式:

List<string> 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 here

我的第一个Whosebug回答,心情激动

我能够通过以下代码解决您的问题。 粘贴所有文本后,您只需按回车键即可。

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