在每一行中查找单词c#

时间:2015-09-20 09:37:57

标签: c# text output lines

所以我正在编写一个逐行接收文本的程序,如果该行包含单词问题,则应输出yes或no。 该程序正在运行,但我必须按两次输入才能获得输出。 我得到的第一个输入,这是最后一行。第二个输入就是这样,while循环可以突破。

有关如何改进这一点并且不需要第二次输入的任何建议吗?

using System;
using System.Collections.Generic;

namespace Tester
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            List<string> stringList = new List<string>();
            string input = "";
            while ((input = Console.ReadLine()) != string.Empty)
            {
                var s = input.ToLower();
                stringList.Add(s.Contains("problem") ? "yes" : "no");
            }

            foreach (var str in stringList)
                Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

好吧,对于最后一个输出,你会输入一些内容。那是(input = Console.ReadLine()) != string.Empty开始的时候,条件会过去。

循环将返回到此行并阻塞,直到您为其提供新输入。然后据说你只需输入enter,在这种情况下循环就会存在。这是预期的行为。

我不确定是什么让你感到不安。如果你真的想要摆脱第二次输入,也许你可以在你的线上放置一些标记(行/q或其他),并且无论何时在你的行中找到你都知道你应该摆脱循环。

或者,您可以计算获得的输入数量,并确保准确地获得1020或其他任何内容。达到该数字后,循环将在处理完最后一个输入后退出。

答案 1 :(得分:1)

您可以使用it "fails if initial quantity is changed" do msg_error = "Change of the initially defined qty is impossible" deal = Deal.create(@attr) deal.update(quantity: 5) expect(deal).to have(1).errors_on(:quantity) end string.IsNullOrEmpty()方法通常比ToUpper()更准确。所以我可能会将你的代码重构为:

ToLower()

顺便欢迎来到SO ......;)

答案 2 :(得分:0)

好的,你的意思是

 static void Main(string[] args)
    {
        string input = "";
        input = Console.ReadLine();
        while (input != string.Empty)
        {
            if (input.Contains("problem"))
            {
                Console.WriteLine("yes");
            }
            else
            {
                Console.WriteLine("no");
            }
            input = Console.ReadLine();
        }
        Console.ReadKey();
    }

也许我知道你的意图。但是如果你想打破一会儿(输入!= string.Empty)你必须按空行。