解析控制台应用程序

时间:2016-11-06 05:18:35

标签: c# c#-4.0 console-application c#-3.0

我有一个由C#

组成的控制台应用程序

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

aaaaa
bbbbb
ccccc

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

            string input = Console.In.ReadToEnd(); 

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

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

我想知道是否有更好的方法来做到这一点 需要点击一次输入键的东西

有什么建议吗?

谢谢

4 个答案:

答案 0 :(得分:2)

在控制台中,如果粘贴一行,则不会立即执行。那就是你粘贴

aaaa
bbbb
cccc
没有任何反应。一旦你点击Enter,Read方法就开始做它的工作了。并且ReadLine()在每个新行之后返回。所以我一直这样做,而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

我的第一个stackoverflow答案,我感到很兴奋。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你不需要做任何额外的事情。只需阅读ReadLine然后点击回车。

string line1 = Console.ReadLine(); //aaaaa
string line2 = Console.ReadLine(); //bbbbb
string line3 = Console.ReadLine(); //ccccc

答案 3 :(得分:0)

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

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