首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何比较不区分大小写的字符串?

如何比较不区分大小写的字符串?
EN

Stack Overflow用户
提问于 2018-07-29 05:36:52
回答 3查看 150关注 0票数 0

我正在编写一段代码,用户需要通过按"y“或"n”或写" yES“或"no”来输入他是否想要一个功能,而不检查大小写是否敏感(因此,如果用户编写YeS或YeS,它就需要工作)。

此外,如果用户写出任何无效的内容,它会说此选项无效,并再次要求用户选择一个选项。

这是它的一个抽象:

代码语言:javascript
复制
    static bool FeatureIsOn { get; set;}

    static void Main()
    {
        bool optionIsValid;

        do //Loops around until the option is valid
        {
            Console.WriteLine();
            Console.Write("Enable Feature? [Y/N]: ");
            string optionString =  Console.ReadLine();

            switch(optionString)
            {
                default:
                    Console.WriteLine("Invalid option.");
                    optionIsValid = false;
                break;

                case "Yes":
                case "yes":
                case "Y":
                case "y":
                    FeatureIsOn = true;
                    optionIsValid = true;
                break;

                case "No":
                case "no":
                case "N":
                case "n":
                    FeatureIsOn = false;
                    optionIsValid = true;
                break;

            }
        } while (optionIsValid != true);
    }

为每种可能的方式写"yes“都有一个大小写,效率不是很高。有没有更好的方法呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-29 05:39:46

在检查前将要检查的字符串转换为大写或小写:

代码语言:javascript
复制
static bool FeatureIsOn { get; set;}

static void Main()
{
    bool optionIsValid;

    do //Loops around until the option is valid
    {
        Console.WriteLine();
        Console.Write("Enable Feature? [Y/N]: ");
        string optionString =  Console.ReadLine();

        // convert string to uppercase 
        optionString = optionString.ToUpper();

        switch(optionString)
        {
            case "YES":
            case "Y":
                FeatureIsOn = true;
                optionIsValid = true;
            break;

            case "NO":
            case "N":
                FeatureIsOn = false;
                optionIsValid = true;
            break;

            default:
                Console.WriteLine("Invalid option.");
                optionIsValid = false;
            break;

        }
    } while (optionIsValid != true);
}
票数 4
EN

Stack Overflow用户

发布于 2018-07-29 05:43:55

您可以使用像String.ToUpper()这样的方法,然后将输入的字符串与YES、NO、Y、N进行比较(也适用于String.ToLower(),但我不确定它是否会更快。

否则,也许一些if/else会给出更干净的结果,但它不会在速度方面改变任何东西。

编辑:另一个选项是使用Console.Read()而不是Console.Readline(),这样如果用户想输入“YES”,它将只保留“Y”(它只记录一个字符),这允许您将测试除以2 ;)

票数 1
EN

Stack Overflow用户

发布于 2018-07-29 05:47:22

先修剪一次,然后再验证它是否包含一个有效的选项( n,y或no,yes),然后使用.contains检查y的值,找出实际的选择。这将是我的策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51575457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档