一次获取字符串并与多个枚举类型进行比较[重复]

Posted

技术标签:

【中文标题】一次获取字符串并与多个枚举类型进行比较[重复]【英文标题】:Take string and compare to multiple enum types all at once [duplicate] 【发布时间】:2014-03-16 07:13:37 【问题描述】:

我真的需要帮助。

如果我有单独的类,我们将其命名为 FileType.java,它看起来像这样:

 public enum FileType
 
     JPG,GIF,PNG,BMP,OTHER
 

然后我从用户那里获取一个字符串,将其命名为 inputString,我如何将“inputString”与每个枚举值进行比较,并使用最最少的代码量?

编辑:这是我尝试过的:

    System.out.print("Please enter your photo's file type. It must be: JPG, GIF, PNG, BMP, or OTHER");
    typeInput = kb.nextLine();

    boolean inputMatches = false;

    while(inputMatches == false)
    
        System.out.print("Invalid input. Please enter your photo's file type. It must be: JPG, GIF, PNG, BMP, or OTHER");

        if(typeInput.equalsIgnoreCase(FileType.values()))
        
            inputMatches = true;
        
    

附言。我很清楚我可以将单个变量设置为与枚举值相同的字符串。我也知道我可以为每个值使用.valueOf()

【问题讨论】:

告诉我们,你尝试了什么。 好吧,这是我尝试过的,但目前有缺陷。 你为什么不使用FileType.valueOf(userInput)?如果它抛出IllegalArgumentException,则输入无效,否则它会为您提供枚举值。 【参考方案1】:

您可以改为将输入转换为枚举

System.out.print("Please enter your photo's file type. It must be: JPG, GIF, PNG, BMP, or OTHER");
boolean typeInput = kb.nextLine();

inputMatches = true;
try
    FileType fileType = FileType.valueOf(inputString.toUpperCase().trim());
catch (IllegalArgumentException e) 
    inputMatches = false;
     

【讨论】:

@Chisx:只是为了删除空格 很抱歉,这让我很困惑。这是有条件的吗?喜欢加入循环?我会使用它,但这对于我们正在做的事情来说是先进的。我们还没有学习异常 我从未见过“try”和“catch”,但不管@Karna,这都是一个很好的答案 嘿,IllegalArgumentException 之后的“e”是什么? @卡纳 @Chisx Lesson: Exceptions

以上是关于一次获取字符串并与多个枚举类型进行比较[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取一个枚举类型元素的个数

c 枚举 获得枚举项的字符串

Java将字符串转换为枚举列表[重复]

Java 枚举

字符串枚举类似于打字稿中的类型[重复]

如何在枚举中获取枚举值的 int [重复]