在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();
}
}
}
对于最后一个输出,您将键入一些内容。这时(input = Console.ReadLine()) != string.Empty
起作用,病情就会过去。
循环将返回到这一行并阻塞,直到您给它新的输入。然后假设你只要输入回车,在这种情况下循环就会存在。这是预期的行为。
我不知道是什么让你不高兴。如果你真的想去掉第二个回车,也许你可以在你的行(行/q
或其他)中放一些令牌,无论何时在你的行中找到它,你都知道你应该跳出循环。
或者你可以计算你得到多少输入,并确保你得到的是10
或20
或其他什么。当达到该数字时,循环将在处理完最后一个输入后退出。
欢迎来到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),你必须按空行