在c#的每一行中查找单词

本文关键字:一行 查找 单词 | 更新日期: 2023-09-27 18:13:40

所以我正在编写一个程序,该程序逐行输入文本,然后如果该行包含单词problem,则应该输出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();
        }
    }
}

在c#的每一行中查找单词

对于最后一个输出,您将键入一些内容。这时(input = Console.ReadLine()) != string.Empty起作用,病情就会过去。

循环将返回到这一行并阻塞,直到您给它新的输入。然后假设你只要输入回车,在这种情况下循环就会存在。这是预期的行为。

我不知道是什么让你不高兴。如果你真的想去掉第二个回车,也许你可以在你的行(行/q或其他)中放一些令牌,无论何时在你的行中找到它,你都知道你应该跳出循环。

或者你可以计算你得到多少输入,并确保你得到的是1020或其他什么。当达到该数字时,循环将在处理完最后一个输入后退出。

欢迎来到SO。:)

可以安全地去掉最后一个ReadKey。假设你正在创建一个控制台应用程序,你通常会运行它……在控制台中——这样,在程序运行完成后,控制台不会关闭自己。如果你在控制台之外的Windows中运行控制台应用程序,情况就不同了——在这种情况下,Windows将打开一个临时控制台,运行应用程序,然后关闭控制台。

同样,如果你使用的是Visual Studio,你可以让VS等待你通过使用"启动不调试"选项(Ctrl+F5)。然后VS会在它自己的末尾添加一个"press enter to close",以防止窗口关闭得太快,允许你检查你的输出/异常。

一个简单的解决方案是每行输出"yes"或"no"值,而不是在应用程序结束时一次输出所有值。

另一种方法(需要更多的编码)是读取单个键,而不是行-然后您可以对用户按Esc做出反应,例如,而不是依赖于空字符串("extra"enter press)。

您可以使用string.IsNullOrEmpty()ToUpper()的方法一般比ToLower()更准确。所以我可能会重构你的代码,像这样:

    private static void Main(string[] args)
    {
        List<string> stringList = new List<string>();
        string input = "";
        while(!string.IsNullOrEmpty(input = Console.ReadLine()))
            stringList.Add(input.ToUpper().Contains("PROBLEM") ? "yes" : "no");
        foreach (var str in stringList)
            Console.WriteLine(str);
        Console.ReadKey();
    }

顺便说一下,欢迎来到SO…div;)

好吧,你是这个意思吗

 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();
    }
也许我知道你的意图。但是如果你想中断while(input!=string.Empty),你必须按空行