C#中至少包含六个单词的字符串的while循环

Posted

技术标签:

【中文标题】C#中至少包含六个单词的字符串的while循环【英文标题】:While loop of a string containing at least six words in C# 【发布时间】:2018-09-09 13:48:01 【问题描述】:

我正在尝试编写一个 while 循环验证来验证用户在输入具有以下条件的句子时的响应:

字符串为空或为空 句子必须至少为六个字。

我能够让 null 或 empty 条件按预期工作,但“必须至少六个字”目前无法按预期工作。每当我输入一个少于六个单词的句子时,它都会接受它。但是,如果我输入了一个包含六个或更多单词的句子,它会在不应该时提示已建立的错误消息。

        while (String.IsNullOrEmpty(sentence) || sentence.Length != 6)
        
            if (String.IsNullOrEmpty(sentence))
            

                Console.WriteLine("Please, do not leave the sentence field empty!");
                Console.WriteLine("Enter your desired sentence again: ");
                sentence = ReadLine();
            
            else
            
                Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
                Console.WriteLine("Enter a sentence with a least 6 words: ");
                sentence = ReadLine();
            
        

我到底做错了什么?

【问题讨论】:

【参考方案1】:
string sentence = Console.ReadLine();
        while (true)
        
            if (String.IsNullOrEmpty(sentence))
            

                Console.WriteLine("Please, do not leave the sentence field empty!");
                Console.WriteLine("Enter your desired sentence again: ");

            
            else if (sentence.Split(' ').Length < 6)
            
                Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
                Console.WriteLine("Enter a sentence with a least 6 words: ");
            
            else break;
            sentence = Console.ReadLine();
        

【讨论】:

应该是 【参考方案2】:

while (String.IsNullOrEmpty(sentence) || sentence.Length != 6) 更改为

while (String.IsNullOrEmpty(sentence) || sentence.Split(' ').Length < 6)

【讨论】:

我添加了您建议的行。但是,当我输入一个六字及以上的字时,它仍然提示消息错误。 @NTaveras sentence 你输入了什么? 您正在寻找不是字符串中字符的单词,请参阅我的回答。 他需要对分割后的字符串重复测试,而不是仅仅落在else块中 @Steve,测试在此期间重复。字符串为 null 或 Empty,用户会收到提示。当他写一个少于 6 个单词的句子时,他会得到提示,否则它会在一段时间内中断【参考方案3】:

sentence.Length 返回字符串中的字符数。你必须把句子分成单词。

string[] words = sentence.Split();

在空白字符处拆分。

因此,您可以将循环编写为

while (String.IsNullOrEmpty(sentence) || sentence.Split().Length < 6)

    ...

这里Length是拆分后的字符串数组的长度。

注意如果句子是null,C#布尔表达式的short-circuit evaluation不会执行||后面的子表达式。因此,您不会得到空引用异常。

【讨论】:

【参考方案4】:

首先,您可以在以下情况下更改您... 它会给你一个少于六个长度的句子 while (sentence.Length

sentence.Split(' ').Length >= 6

【讨论】:

【参考方案5】:

// 首先尝试改变条件,如波纹管..然后尝试波纹管代码..

public static void Main(string[] args)
    
        int count = 0;
        inputSteream:
        Console.WriteLine("Enter your  sentence: ");
        string sentence = Console.ReadLine();
        while (!String.IsNullOrEmpty(sentence) && sentence.Length >= 6)
        
            foreach (var item in sentence.Split(' '))
            
                if (item.Length >= 6)
                
                    Console.WriteLine("The sentece is 0", item);
                    count++;
                    break;
                

            
            break;
        
        if (count == 0)
        
            goto inputSteream;
        
        Console.ReadKey();
    

【讨论】:

当你认为你有更好的答案时,这并不是要否决其他人的答案。 对不起,亲爱的奥尔德特。我不小心发生了【参考方案6】:

试试下面的示例代码

 string sentence=Console.ReadLine();

            if (String.IsNullOrEmpty(sentence))
            

                Console.WriteLine("Please, do not leave the sentence field empty!");
                Console.WriteLine("Enter your desired sentence again: ");
                sentence = Console.ReadLine();
            
            else if(sentence.Length!=6)
            
                Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
                Console.WriteLine("Enter a sentence with a least 6 words: ");
                sentence =  Console.ReadLine();
            
            else
            
            Console.WriteLine("Your entered string length is'0' and word is1", sentence.Length,sentence);
            

【讨论】:

以上是关于C#中至少包含六个单词的字符串的while循环的主要内容,如果未能解决你的问题,请参考以下文章

JS中 do while循环问题

while循环对C++中字符串中的每个单词重复

C++ 检查字符串是不是包含至少 1 个数字和 1 个字母

第九章:循环结构进阶

如何在 bash shell 中将一个字符串拆分为多个字符串,至少用一个空格分隔?

带有字符串而不是整数的 while 循环