我有一个由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键。
我想知道是否有更好的方法来做到这一点 需要点击一次输入键的东西
有什么建议吗?
谢谢
答案 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);